VB.NET字符集

4
根据MSDN VB.NET使用此扩展字符集。根据我的经验,它实际上使用了这个:

alt text

  1. 我错过了什么?为什么它说使用了一个并使用了另一个?
  2. 我做错了什么吗?
  3. 是否有某种转换工具可以将原始字符集转换为其他字符集?
3个回答

6
这种行为在 Chr 命令 的文档中有定义:

返回的值取决于当前线程的代码页,该代码页包含在 System.Globalization 命名空间中 TextInfo 类的 ANSICodePage 属性中。您可以通过指定 System.Globalization.CultureInfo.CurrentCulture.TextInfo.ANSICodePage 来获取 ANSICodePage。

因此,大于 127 的值的 Chr 输出是与系统相关的。如果您想要可重现的结果,请通过调用 Encoding.GetEncoding(String) 创建所需的 Encoding 实例,然后使用 Encoding.GetChars(Byte()) 将数值转换为字符。
如果您 查看问题中链接的表格 上一级,您会发现它们并没有声称这个表格总是 Chr 命令的输出:

出现在 Windows 中的大于 127 的字符取决于所选字体。

本节中的图表显示控制台应用程序的默认字符集。

您的应用程序是一个 WinForm 应用程序,而不是控制台应用程序。即使在控制台中,所使用的字符集也可以更改(例如,通过使用 chcp 命令),因此出现了 "默认" 这个词。
有关 .NET 中使用的编码的详细信息,我建议阅读以下 MSDN 文章:.NET Framework 中的字符编码

2
第一个字符集是代码页437(CP437),第二个看起来像代码页1252(CP1252),也称为Windows Latin-1。
我猜 VB.Net 只是采用了 PC 的默认编码。

1
猜测是准确的,Chr() 和 Asc() 使用默认的系统代码页,在西欧和美洲通常为1252。使用ChrW() 和 AscW() 来处理Unicode。437是旧的IBM PC代码页,仍然是控制台模式应用程序的默认设置。 - Hans Passant

1

你是怎么写出这个的?因为通常情况下,当你使用输出流函数时,你可以指定相应的编码。

编辑:我知道这不是C#,但你可以看到这个想法...

你需要设置文件流的编码,可以通过以下方式实现: 创建文件流时设置编码


我在控制台中使用了writeline(chr(Number))。对于你所看到的图片,使用了 Textbox.text = chr(Number)。 - Connor Albright

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接