【发布时间】:2013-02-20 05:11:27
【问题描述】:
我正在尝试将 ASCII 字符 131(ƒ - 带钩子的拉丁小写字母 f)输出到消息框,但由于某些奇怪的原因,它显示为空字符串。我有以下 VB.NET 代码:
Dim str As String = Convert.ToChar(131)
MessageBox.Show(str, "test", MessageBoxButtons.OK, MessageBoxIcon.Information)
Debug.Print(str)
在上面,消息框没有显示任何内容,但 debug.print 语句在“立即窗口”中正确显示了字符。我有大约 70 个其他 ascii 字符都可以使用这种方法正常工作,但只有少数几个显示为空白(131 和 EN 破折号 150)。
例如,以下工作:
str = Convert.ToChar(164)
MessageBox.Show(str, "test", MessageBoxButtons.OK, MessageBoxIcon.Information)
Debug.Print(str)
我也尝试转换为 UTF8,但我得到了与第一个代码 sn-p 中相同的行为:
Dim utf8Encoding As New System.Text.UTF8Encoding(True)
Dim encodedString() As Byte
str = Convert.ToChar(131)
encodedString = utf8Encoding.GetBytes(str)
Dim str2 As String = utf8Encoding.GetString(encodedString)
MessageBox.Show(str2, "test", MessageBoxButtons.OK, MessageBoxIcon.Information)
Debug.Print(str2)
这是编码问题吗?感谢您提供任何见解。
编辑:澄清一下,我实际上并没有尝试将字符输出到消息框。该代码只是一个测试。我试图将字符作为字符串传递给在第 3 方 xml 编辑器控件中使用它的函数,但它显示为空白。即使在 Visual Studio 中调试时,您也可以看到它的值等于 ""。
编辑 2:感谢下面接受的答案的一些调查,我发现我使用了错误的 unicode 字符。对于这个 f 字符,要使用的代码是 ToChar(402)。这非常有效。谢谢大家。
【问题讨论】:
-
字符“ƒ”不是 Ascii 字符。这可能相关也可能不相关。这个字符在不同的字符码中有不同的码号。
-
查看 vb.net 中的默认字体(MS Sans Serif)我看不到那个符号,粘贴到记事本并更改为 Sans Serif 符号显示为一个奇怪的字符,它可能是一个字体问题?
-
MessageBox 使用默认的系统字体。如果默认系统字体中不存在该字符,则您将看不到该字符。您可以滚动自己的 MessageBox,或者查看Extended Message Box Library,它看起来允许您更改标准 MessageBox 上的字体(以及其他内容)。
-
Use
Option Strict On! - 那么这段代码甚至无法编译。 -
@konrad-rudolph 我有它,它对我有用...你在哪里遇到错误?
标签: vb.net character-encoding ascii