VB.NET如何强制Asc在非英语系统上使用英文代码页

时间:2012-06-15 13:35:27

标签: vb.net codepages

在VB.NET中,我想模拟一种“强制”ASC函数使用英文代码页的方法,即使在具有与英语不同的“非unicode语言”的系统上也是如此。

例如:

Asc("Œ")

在将“非unicode语言”设置为英语的系统上,目前结果为140

在将“非unicode语言”设置为斯洛伐克语的系统上,目前结果为79

扭曲是我无法使用AscW(由于我无法透露的原因)

在上面的特定示例中,我需要代码始终返回140。


如果有办法强制整个程序使用英文代码页,我也可以使用它。

我尝试过使用CurrentCulture:

Threading.Thread.CurrentThread.CurrentCulture = New Globalization.CultureInfo("en-US")
Threading.Thread.CurrentThread.CurrentUICulture = New Globalization.CultureInfo("en-US")

在Asc之前,甚至是ApplicationEvent的Startup上的第一行,但没有运气。

谢谢!

2 个答案:

答案 0 :(得分:2)

从使用ILSpy开始,看起来Asc使用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))

答案 1 :(得分: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