C#控制台输出瑞典、中文显、日语显示乱码问题

问题:瑞典文字的“?”在控制台中无法正确的显示

String[] strings1 = { "case", "encyclop?dia", "encyclop?dia", "Arch?ology" };

程序运行后 显示效果如下:

C#控制台输出瑞典、中文显、日语显示乱码问题

 

 我们通过在控制台的标题栏点击右键》属性,查看当前控制台显示所用的编码格式是:当前代码页936(ANSI/OEM-中文简体 GBK),它对应的是操作系统中,控制面板》区域》管理》更改系统区域设置》当前区域 如下图所示:

C#控制台输出瑞典、中文显、日语显示乱码问题

 

 

 

 

C#控制台输出瑞典、中文显、日语显示乱码问题

 

 C#控制台输出瑞典、中文显、日语显示乱码问题

 

 

 

 

 当前代码页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

我们把系统的区域设置》改为瑞典语后重启电脑。就不会出现乱码了。

C#控制台输出瑞典、中文显、日语显示乱码问题

            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();
            }

 

C#控制台输出瑞典、中文显、日语显示乱码问题

上一篇:C# .NETCORE3.1 系列教程(三) 控制器中控制页面弹出提示框功能实现(ViewComponent实现)


下一篇:国密SM2,SM4 For Delphi xe 10.3.3