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

时间:2016-11-24 13:37:24

标签: visual-studio drawing box codepages extended-ascii

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

我想使用一些标准的盒子绘图字符在场地周围绘制一个方框,例如:(186:║),(187:╗)(188:╝),(200:╚),(201: ╔),(205:═)但我没有到达任何地方。

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

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

有关如何以及在何处更改它的任何想法?或者这是我需要在Windows中改变的东西吗?我正在运行Win 7 Pro,如果这很重要的话。

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

1 个答案:

答案 0 :(得分:0)

Nota Bene:“高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║
╚═══╝