神刀安全网

.NET Core R2连中文编码都不支持吗?

今天写了一个简单的.NET Core RC2控制台程序,发现中文显示一直是乱码。查看操作系统设置,没有问题;查看源文件编码,也没有问题;甚至查看了Console字符编码相关的注册表,依然没有发现问题。难道NET Core到了RC2,莫非连一些常用的编码都不支持吗?

现在给大家重现这个问题,通过VS 2015创建一个.NET Core控制台程序。

.NET Core R2连中文编码都不支持吗?

我们在Main方法中只编写了如下几行行程序,将输入的字符串直接打印出来。

 using System;     namespace App  {      public class Program      {          public static void Main(string[] args)          {              while (true)              {                  Console.WriteLine(Console.ReadLine());              }          }      }  } 

运行程序并分别输入中文和英文,我们会发现输入的中文显示为乱码。

.NET Core R2连中文编码都不支持吗?

为了进一步证明.NET Core对编码的局限,我们按照如下的方式调用Encoding的GetEncoding方法分别获取两种中文编码:GB2312和CP936。

 using System;  using System.Text;     namespace App  {      public class Program      {          public static void Main(string[] args)          {              try              {                  Console.WriteLine(Encoding.GetEncoding(936));              }              catch (Exception ex)              {                  Console.WriteLine(ex.Message);              }                 try              {                  Console.WriteLine(Encoding.GetEncoding("GB2312"));              }              catch (Exception ex)              {                  Console.WriteLine(ex.Message);              }          }      }  } 

程序执行结果证明,上述两种中文编码均不支持。

.NET Core R2连中文编码都不支持吗?

我们提供的两种中文编码在默认情况下都不支持,是因为默然情况下它们的EncodingProvider没有注册。上面显示的错误消息其实也提到了这几点,并且提到一个用于注册EncodingProvider的方法(Encoding.RegisterProvider)。于是我们按照下面的方式注册一个CodePageEncodingProvider。

 using System;  using System.Text;     namespace App  {      public class Program      {          public static void Main(string[] args)          {              Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);              Console.WriteLine(Encoding.GetEncoding(936));              Console.WriteLine(Encoding.GetEncoding("GB2312"));              while (true)              {                  Console.WriteLine(Console.ReadLine());              }          }      }  } 

CodePageEncodingProvider定义在NuGet包“System.Text.Encoding.CodePages”之中,所以我们需要现在Project.json文件中按照如下的方式注册对应的依赖。

 {    ...    "dependencies": {      "Microsoft.NETCore.App": {        "type": "platform",        "version": "1.0.0-rc2-3002702"      },      "System.Text.Encoding.CodePages":  "4.0.1-rc2-24027"    },    ...  } 

再次执行我们的程序后一切正常。

.NET Core R2连中文编码都不支持吗?

转载本站任何文章请注明:转载至神刀安全网,谢谢神刀安全网 » .NET Core R2连中文编码都不支持吗?

分享到:更多 ()

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址