在调试中我确实看到了正确的字符。为什么Visual Studio和System.Console编码有所不同?如何使控制台的编码匹配VS的一个?
有几篇帖子询问类似的问题,但我们缺乏直截了当的答案。我在下面列出了我尝试过的所有替代方案 - 哪些方法无效。
有些帖子提到,为了让控制台正确打印它们,您需要正确设置控制台输出编码+有一个支持相关字符集的字体。我只是找不到答案(如果可能的话)来改变控制台的字体。
1 。将Console.OutputEncoding
设置为UTF8或
Encoding.GetEncoding(1255);
就我而言,我正在处理希伯来字符。
2 。打印结果
Encoding.GetEncoding(1255).GetString(Encoding.Default.GetBytes(myString))
同样,在调试中,字符串会正确显示。是的,我对字符编码的主题并不熟悉,我希望这对于像这样简单的东西不是必需的,通过System.Console显示非ascii字符。
答案 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();
}
输出: