C# 控制台将方框字符输出为“?”

C# Console is outputting box characters as "?"

为了好玩,我正在用 ascii 制作游戏,但我遇到了一个问题,即字符未按我预期的方式打印。 它不是正常打印字符,而是打印出问号。 情况是这样的:

预期结果:

┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ PacGunMan         [_][^][X] ┃
┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫
┃          Main Menu          ┃
┃    ━━━━━━━━━━━━━━━━━━━━━    ┃
┃                             ┃
┃          [1] Start          ┃
┃         [2] Settings        ┃
┃         [3] Credits         ┃
┃           [4] Exit          ┃
┃                             ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛

我实际得到的是:

???????????????????????????????
? PacGunMan         [_][^][X] ?
???????????????????????????????
?          Main Menu          ?
?    ?????????????????????    ?
?                             ?
?          [1] Start          ?
?         [2] Settings        ?
?         [3] Credits         ?
?           [4] Exit          ?
?                             ?
???????????????????????????????

渲染源代码:

public static void Automatic(List<string> RenderItem) {
    Console.WriteLine("Rendering...");
    foreach (string Y in RenderItem) {   // The variable is named "Y" because Y-Axis
        Console.WriteLine(Y);
    }
}

C#,出于某种原因,以 ASCII 编码打印字符。所以我们需要将编码类型改为UTF-8。

发生这种情况的原因之一可能是字符实际上可能不是 ASCII 格式。但在这种情况下,这是打印 error/problem 而不是字符的问题。

所以我们可以这样做:

Console.OutputEncoding = Encoding.UTF8; // Get C# to do this before outputting/printing.

渲染源代码应该是这样的:

public static void Automatic(List<string> RenderItem) {
    Console.OutputEncoding = Encoding.UTF8;
    Console.WriteLine("Rendering...");
    foreach (string Y in RenderItem) {
        Console.WriteLine(Y);
    }
}