Console.Write() - 显示扩展的ASCII字符?
-
08-10-2019 - |
题
我能够正确显示标准的ASCII符号(最多127),例如“心”,注意“您知道我的意思。我还想显示可以用于绘制墙壁(例如U0205)但行不通的墙壁。我如何显示它们?谢谢你。
解决方案
控制台模式应用程序仅限于8位代码页面编码。许多机器上的默认值是IBM437,它是与旧的IBM PC字符集匹配的代码页。您可以通过分配输出编码属性来更改代码页:
Console.OutputEncoding = Encoding.UTF8;
但是现在您通常对字体有问题。控制台默认为终端字体,端子字体是一种旧设备字体,在正确的位置具有字形以生成IBM PC字符集。没有很多字体可以产生与Unicode Codepoint匹配的合适字形。 Consolas就是关于它的,可在Vista和Win7上使用。
但这不是您要问的,我想,我猜您实际上是在询问旧的盒子绘图字符。它可以在没有任何修补控制台设置的情况下使用,您只需使用正确的Unicode字符即可。这是一个应该在副本和纸上生存的例子:
class Program {
static void Main(string[] args) {
Console.WriteLine("╒════════╕");
Console.WriteLine("│ Hello │");
Console.WriteLine("│ world │");
Console.WriteLine("╘════════╛");
Console.ReadLine();
}
}
要查找这些字符,请使用Windows Charmap.exe applet。单击“搜索”文本框中的“高级视图”复选框,然后键入“框”,网格将填充框绘图字符。第一个将正确转换为控制台的可用速度是“ u250c”。
其他提示
问题似乎是在控制台应用程序上,而不是与您的程序有关。 Windows(CMD.EXE)中的标准控制台似乎不适当支持Unicode - 例如,尝试将下面的字符串直接复制到cmd.exe窗口中:
fußballöü
Powershell似乎也遭受了同样的问题。
解决问题的一种可能解决方案是创建一个专用窗口/表单,以用作“输出控制台”,而不是使用执行应用程序的实际控制台。
不隶属于 StackOverflow