问题:瑞典文字的“?”在控制台中无法正确的显示?
String[] strings1 = { "case", "encyclop?dia", "encyclop?dia", "Arch?ology" };
程序运行后 显示效果如下:
我们通过在控制台的标题栏点击右键》属性,查看当前控制台显示所用的编码格式是:当前代码页936(ANSI/OEM-中文简体 GBK),它对应的是操作系统中,控制面板》区域》管理》更改系统区域设置》当前区域 如下图所示:
当前代码页936(ANSI/OEM-中文简体 GBK)是什么意思呢?
代码页:code page 简体中文的code page值为936,繁体中文的code page值为950(表示Big-5编码)
ANSI:实ANSI并不是某一种特定的字符编码,而是在不同的系统中,ANSI表示不同的编码。你的美国同事Bob的系统中ANSI编码其实是ASCII编码(ASCII编码不能表示汉字,所以汉字为乱码),而你的系统中(“汉字”正常显示)ANSI编码其实是GBK编码
详细:https://zhuanlan.zhihu.com/p/27136737
通过以上分析我们得出 :控制台显示编码格式是GBK 无法显示瑞典文字。所以我们要修改控制台的显示编码格式(InputEncoding)。
解决方案1
在要输出中文的语句上加上这一行即可解决乱码问题
Console.OutputEncoding = System.Text.Encoding.Unicode;
。。。。。。。 Console.WriteLine("打印中文");
解决方案2
我们把系统的区域设置》改为瑞典语后重启电脑。就不会出现乱码了。
char a = (char)(230); int b = (int)(‘?‘); Console.WriteLine("Current Culture: {0}", CultureInfo.CurrentCulture.Name); Console.WriteLine("Current UICulture: {0}", CultureInfo.CurrentUICulture.Name); Console.WriteLine(a); Console.WriteLine(Console.InputEncoding.CodePage); String[] cultureNames = { "en-US", "se-SE" }; String[] strings1 = { "case", "encyclop?dia", "encyclop?dia", "Arch?ology" }; String[] strings2 = { "Case", "encyclopaedia", "encyclopedia", "ARCH?OLOGY" }; StringComparison[] comparisons = (StringComparison[])Enum.GetValues(typeof(StringComparison)); // Console.OutputEncoding = System.Text.Encoding.Unicode; Console.WriteLine(Console.InputEncoding.CodePage); foreach (var cultureName in cultureNames) { Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(cultureName); Console.WriteLine("Current Culture: {0}", CultureInfo.CurrentCulture.Name); for (int ctr = 0; ctr <= strings1.GetUpperBound(0); ctr++) { foreach (var comparison in comparisons) { Console.WriteLine(" {0} = {1} ({2}): {3}", strings1[ctr], strings2[ctr], comparison, String.Equals(strings1[ctr], strings2[ctr], comparison)); } Console.WriteLine(); } Console.WriteLine(); }