【问题标题】:Console.OutputEncoding set accordingly but Console still prints geeberishConsole.OutputEncoding 相应设置,但控制台仍然打印 geeberish
【发布时间】:2015-09-20 12:19:02
【问题描述】:

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

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

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

1.将Console.OutputEncoding设置为UTF8或

Encoding.GetEncoding(1255);

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

2.尝试打印

的结果
Encoding.GetEncoding(1255).GetString(Encoding.Default.GetBytes(myString))

再次,在调试中,字符串确实显示正确。是的,我对字符编码主题不太熟悉,我希望通过 System.Console 显示非 ascii 字符这样简单的事情不需要这样做。

【问题讨论】:

  • 由于字体原因,控制台无法正确打印。
  • @HamletHakobyan:哈姆雷特,我忘了在我的帖子中提到字体,更新了它 - 简而言之,如果字体是解决方案,如何改变控制台的 - 我找不到这样的回答。
  • 字体选择不多。如果您的操作系统语言是英语,我认为没有定义希伯来字符集的控制台字体。如果您为操作系统安装希伯来语语言包,也许可以解决问题。
  • 您是否也设置了控制台字体,如我的链接中所述?
  • @AlastairMcCormack:我编辑了您提到的帖子中的答案,添加了解决我的问题的链接,是 est,指导我如何向命令提示符添加其他显示字体。我宁愿保留这篇文章,只是因为我认为(显然是因为我写了它的事实而产生了偏见)它更简洁明了地找到了解决方案。

标签: .net encoding utf-8


【解决方案1】:

终于有答案了:

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

回答Setting System.Console.OutputEncoding 转换为 UTF8、Unicode 或其他任何你需要的东西。如果字符仍然显示不正确,则问题在于字体窗口命令提示符(在 VS 中我们称之为控制台)配置为使用不支持您尝试显示的字符集。简而言之,问题出在字体

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

答案: Here 是一个很棒的链接,它将引导您完成此类任务。

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

简而言之,如果您结束了这篇文章并尝试在命令提示符窗口中打印一些非 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();
}

输出:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-19
    • 2012-10-26
    相关资源
    最近更新 更多