2

在 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 启动的第一行,但没有运气。

谢谢!

4

2 回答 2

3

通过使用 ILSpy,看起来 Asc 使用 Encoding.Default 来获取操作系统的默认编码以确定如何获取字节。所以你必须自己动手:

    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))
于 2012-06-15T14:20:51.907 回答
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
于 2012-06-15T14:12:46.353 回答