Console.OutputEncoding相应设置,但控制台仍然打印geeberish

时间:2015-09-20 12:19:02

标签: .net encoding utf-8

在调试中我确实看到了正确的字符。为什么Visual Studio和System.Console编码有所不同?如何使控制台的编码匹配VS的一个?

有几篇帖子询问类似的问题,但我们缺乏直截了当的答案。我在下面列出了我尝试过的所有替代方案 - 哪些方法无效。

有些帖子提到,为了让控制台正确打印它们,您需要正确设置控制台输出编码+有一个支持相关字符集的字体。我只是找不到答案(如果可能的话)来改变控制台的字体。

1 。将Console.OutputEncoding设置为UTF8或

Encoding.GetEncoding(1255);

就我而言,我正在处理希伯来字符。

2 。打印结果

Encoding.GetEncoding(1255).GetString(Encoding.Default.GetBytes(myString))

同样,在调试中,字符串会正确显示。是的,我对字符编码的主题并不熟悉,我希望这对于像这样简单的东西不是必需的,通过System.Console显示非ascii字符。

1 个答案:

答案 0 :(得分:2)

以下是答案:

  

为什么Visual Studio和System.Console编码有所不同?怎么做   控制台的编码匹配VS的一个?

<强>答案Setting System.Console.OutputEncoding到UTF8,Unicode或其他任何你需要的工作。如果字符仍然显示不正确,问题是使用字体Windows命令提示符(我们称之为控制台的VS中的内容)配置为使用不支持您尝试显示的字符集。简而言之,问题就是字体

  

我找不到答案(如果可能的话)来改变   控制台的字体。

<强>答案: Here是一个很棒的链接,可以指导您完成这项任务。

在命令提示符中添加要显示的其他字体后,this answer会显示如何选择新添加的字体的屏幕截图。

简而言之,如果你在这篇文章中结束并试图在命令提示符窗口中打印一些非ascii字符集,解决方案是设置System.Console .OuputEncoding相应地+确保命令提示符配置使用的字体支持您正在处理的字符集

此外 - 如果您需要控制台支持从右到左打印,找不到内置支持,您可以手动播放光标位置,如:

private static void Main(string[] args)
{
    Console.OutputEncoding = Encoding.Unicode;

    List<string> sentences = new List<string>();

    sentences.Add(string.Format("אברהם"));
    sentences.Add(string.Format("שורה {0}, אחרי אברהם", 2));

    foreach (var sentence in sentences)
    {
        WriteLineRTL(sentence);
    }
}

private static void WriteLineRTL(string input)
{
    var chars = input.ToCharArray();
    Console.CursorLeft = chars.Length;
    for (int i = 0; i < chars.Length; i++)
    {
        Console.Write(chars[i]);
        Console.CursorLeft -= 2;
    }
    Console.WriteLine();
}

输出:

enter image description here