2012-06-15 61 views
1

在VB.NET中,我想模擬一種方法來「強制」ASC功能使用英文代碼頁,即使在具有「非Unicode的語言「不同於英語。VB.NET如何強制Asc在非英文系統上使用英文代碼頁

例如:

Asc("Œ") 

在具有設置爲英語「非Unicode語言」的系統中,目前的結果爲140

在具有「非Unicode語言」的系統設定如斯洛伐克語,目前的結果是79

扭曲是我不能用戶ASCW(原因我不能透露)

在特定示例中上述我甲腎上腺素編輯的代碼總是返回140


如果有辦法,迫使整個程序使用英語代碼頁,我可以與正常工作。

我試着用的CurrentCulture玩:

升序之前或者甚至在了ApplicationEvent的啓動的第一線,但沒有運氣
Threading.Thread.CurrentThread.CurrentCulture = New Globalization.CultureInfo("en-US") 
Threading.Thread.CurrentThread.CurrentUICulture = New Globalization.CultureInfo("en-US") 

權。

謝謝!

回答

2

從使用ILSpy,它看起來像升序使用Encoding.Default獲得的默認編碼os來確定如何獲取字節。所以你將不得不推出自己的:

Dim enc As System.Text.Encoding = System.Text.Encoding.GetEncoding(1252) '1252 is the default codepage on US Windows 
    Dim arr() As Byte = enc.GetBytes("Œ") 
    MessageBox.Show(arr(0)) 
+0

完美!正是我需要的。非常感謝 :) – jplanglais

1

我不確定如何控制ASC使用的代碼頁,所以這並不直接回答您的問題,但我會建議您使用Encoding類來執行ASCII編碼和解碼。 Asc方法主要是爲了向後兼容VB6代碼。例如,要使用舊的IBM英語代碼頁(437)獲得的ASCII值,你可以這樣做:

Public Function EnglishAsc(ByVal Text As String) As Byte 
    Dim enc As Encoding = Encoding.GetEncoding(437) 
    Dim bytes As Byte() = enc.GetBytes(Text) 
    If bytes.Length > 0 Then 
     Return bytes(0) 
    Else 
     Return 0 
    End If 
End Function 

Public Function EnglishAsc(ByVal Character As Char) As Byte 
    Dim enc As Encoding = Encoding.GetEncoding(437) 
    Dim bytes As Byte() = enc.GetBytes(New Char() {Character}) 
    If bytes.Length > 0 Then 
     Return bytes(0) 
    Else 
     Return 0 
    End If 
End Function