我有一个Win32控制台应用程序,可以在CMD窗口中播放生活游戏。
我想使用一些标准的盒子绘图字符在场地周围绘制一个方框,例如:(186:║),(187:╗)(188:╝),(200:╚),(201: ╔),(205:═)但我没有到达任何地方。
首先,在构建期间,我收到警告,例如:“警告C4566:由通用字符名称'\ u2551'表示的字符无法在当前代码页中表示(1252)”
代码将运行,但它将显示其他代替框图字符的内容。我查看了尽可能多的属性,但我没有找到任何地方来更改当前的代码页。
有关如何以及在何处更改它的任何想法?或者这是我需要在Windows中改变的东西吗?我正在运行Win 7 Pro,如果这很重要的话。
我确实将VS编辑器的代码页更改为850(西欧DOS),但这对可执行文件没有影响。
答案 0 :(得分:0)
Nota Bene:“高ASCII”和extended-ascii不够具体,无法发挥作用。 (请停止使用这些条款。)
最后的事情:您的控制台必须选择支持您要使用的编码和字符的字体。自1981年以来,这不应该是盒子绘图字符的问题。但您可以通过检查控制台设置并使用charmap
进行检查。
最好不要使用默认的C#源文件编码。 UTF-8很棒。
接下来,使用您要在源代码中使用的字符作为文字UTF-16代码单元。所以,“║”而不是186-但是“\ u2551”如果必须的话。它使代码更容易阅读。
Console.OutputEncoding
最好使用UTF-8作为输出,除非它以某种方式不受支持或使用起来不方便。
如果可以,请使用chcp 65001
命令将控制台编码更改为UTF-8。如果您不能,请返回并将Console.OutputEncoding更改为您的控制台正在使用的任何内容(例如,代码页437)。
以下是一个例子:
class Program
{
static void Main(string[] args)
{
var codePage = Console.OutputEncoding.CodePage.ToString();
var length = codePage.Length;
Console.WriteLine($"╔{new String('═', length)}╗");
Console.WriteLine($"║{codePage}║");
Console.WriteLine($"╚{new String('═', length)}╝");
}
}
在cmd.exe中执行chcp 65001后显示此内容:
╔═════╗
║65001║
╚═════╝
而且,如果我在没有首先执行chcp的情况下运行它:
╔═══╗
║437║
╚═══╝
这就是我在cmd.exe中执行chcp 850之后:
╔═══╗
║850║
╚═══╝