【问题标题】:How do I write special characters (0x80..0x9F) to the Windows console?如何将特殊字符 (0x80..0x9F) 写入 Windows 控制台?
【发布时间】:2011-10-28 13:15:15
【问题描述】:

我想要这个代码:

System.Console.Out.WriteLine ("œil");

显示œil 而不是oil,就像在我的测试程序中那样。

Console.OutputEncoding 在我的系统上默认设置为Western European (DOS)CodePage 设置为 850,WindowsCodePage 设置为 1252)。该字符集包含特殊的 OE 和 oe 双音(可以在 Wikipedia article on Windows-1252 上看到),但不知何故,我怀疑在 ISO-8859-1 集中找不到的字符会被丢弃/替换。

âç 等字符可以正确显示在控制台上,但扩展的 0x80 ... 0x9F 范围内的任何字符都不会。

如何在控制台上正确显示它们?

【问题讨论】:

  • 在控制台上获得代码页 1252 非常不寻常,它几乎总是 437,IBM PC OEM 代码页。其中没有 \u0153 的字形。您可以更改 OutputEncoding,但您还必须更改控制台字体。
  • 顺便说一下,“西欧 (DOS)”是代码页 850,而不是 1252。它包含 ISO 8859-1 中的所有字符(即 windows 1252 的 0xA0-0xFF),这可能会引起一些混乱。 .NET 函数本身使用 Unicode,但在写入控制台并选择非 truetype 字体时会被翻译(有时效果不佳)。
  • 我已经澄清了代码页问题; System.Text.SBCSCodePageEncoding 同时返回一个代码页和一个 Windows 代码页,我把两者都搞混了。对不起。

标签: c# character-encoding console windows-console


【解决方案1】:

像这样:

Console.OutputEncoding = System.Text.Encoding.UTF8;
System.Console.Out.WriteLine("œil");

不要忘记为控制台窗口选择支持所需字符的字体。这是我使用 Consolas 字体的控制台窗口的屏幕截图。

【讨论】:

  • 确实,这行不通。在我的 Windows 7 x64 上,执行您的代码会产生一个叉号,后跟字符 ôil
  • 对我来说很好。您的控制台窗口中有什么字体?
  • 请注意,Lucida Console 有很多字符错误。使用其他东西,例如 Consolas。
  • 请参阅stackoverflow.com/questions/1802600/…,了解如何使用互操作在 C# 中更改控制台的字体。
  • 秘密确实在字体中...使用 Consolas 作为字体可以正确显示 UTF8 输出,就像 David 在他的屏幕截图中发布的那样。非常感谢。
【解决方案2】:

您可以像这样在控制台上设置输出编码...

Console.OutputEncoding = Encoding.UTF8;

【讨论】:

  • 我想我最终评论了一个陈旧的页面:)
  • 是的,我自己做的很多+1
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-10
  • 1970-01-01
相关资源
最近更新 更多