如何在 Visual Studio 15 控制台应用程序中使用框绘制高位 ASCII 字符?

JSz*_*JSz 5 drawing codepages extended-ascii visual-studio box

我有一个 Win32 控制台应用程序,可以在 CMD 窗口中玩生命游戏。

\n\n

我想使用一些标准的方框绘制字符在字段周围绘制一个方框,例如: (186: \xe2\x95\x91), (187: \xe2\x95\x97) (188: \xe2\x95\ x9d), (200: \xe2\x95\x9a), (201: \xe2\x95\x94), (205: \xe2\x95\x90) 但我什么也没得到。

\n\n

首先,在构建过程中,我收到如下警告:“警告 C4566:由通用字符名称 \'\\u2551\' 表示的字符无法在当前代码页 (1252) 中表示”

\n\n

该代码将运行,但它将显示其他内容来代替方框图字符。我查看了尽可能多的属性,但没有找到任何可以更改当前代码页的地方。

\n\n

知道如何以及在哪里更改它吗?或者这是我需要在 Windows 中进行更改的内容吗?我正在运行 Win 7 Pro,如果这很重要的话。

\n\n

我确实将 VS 编辑器的代码页更改为 850(西欧 DOS),但这对可执行文件没有影响。

\n

Tom*_*get 1

Nota Bene:“高 ASCII”和不够具体,没有意义。(请停止使用这些术语。)

\n\n

最后一件事:您的控制台必须选择支持您要使用的编码和字符的字体。对于 1981 年以来的画框字符来说,这不应该是问题。但是您可以通过检查控制台设置并使用 来进行检查charmap

\n\n

最好不要弄乱默认的 C# 源文件编码。UTF-8 很棒。

\n\n

接下来,使用您想要在源代码中使用的字符作为文字 UTF-16 代码单元。因此,如果必须的话,可以使用“\xe2\x95\x91”而不是 186\xe2\x80\x94,而是“\\u2551”。它使代码更容易阅读。

\n\n

Console.OutputEncoding最好在输出中使用 UTF-8,除非不知何故它不受支持或难以使用。

\n\n

如果可以,请使用以下chcp 65001命令将控制台编码更改为 UTF-8。如果不能,请返回并将 Console.OutputEncoding 更改为控制台正在使用的任何内容(例如,代码页 437)。

\n\n
\n\n

这是一个例子:

\n\n
class Program\n{\n    static void Main(string[] args)\n    {\n        var codePage = Console.OutputEncoding.CodePage.ToString();\n        var length = codePage.Length;\n        Console.WriteLine($"\xe2\x95\x94{new String(\'\xe2\x95\x90\', length)}\xe2\x95\x97");\n        Console.WriteLine($"\xe2\x95\x91{codePage}\xe2\x95\x91");\n        Console.WriteLine($"\xe2\x95\x9a{new String(\'\xe2\x95\x90\', length)}\xe2\x95\x9d");\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

当我在 cmd.exe 中执行 chcp 65001 后,它会显示以下内容:

\n\n
\xe2\x95\x94\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x97\n\xe2\x95\x9165001\xe2\x95\x91\n\xe2\x95\x9a\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x9d\n
Run Code Online (Sandbox Code Playgroud)\n\n

如果我不先执行 chcp 就运行它:

\n\n
\xe2\x95\x94\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x97\n\xe2\x95\x91437\xe2\x95\x91\n\xe2\x95\x9a\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x9d\n
Run Code Online (Sandbox Code Playgroud)\n\n

在我在 cmd.exe 中执行 chcp 850 之后:

\n\n
\xe2\x95\x94\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x97\n\xe2\x95\x91850\xe2\x95\x91\n\xe2\x95\x9a\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x9d\n
Run Code Online (Sandbox Code Playgroud)\n