难道.NET Core到R2连中文编码都不支持吗?
发布时间:2020-12-16 09:07:46 所属栏目:asp.Net 来源:网络整理
导读:今天写了一个简单的.NET Core RC2控制台程序,发现中文显示一直是乱码。查看操作系统设置,没有问题;查看源文件编码,也没有问题;甚至查看了Console字符编码相关的注册表,依然没有发现问题。难道NET Core到了RC2,莫非连一些常用的编码都不支持吗? 现在
今天写了一个简单的.NET Core RC2控制台程序,发现中文显示一直是乱码。查看操作系统设置,没有问题;查看源文件编码,也没有问题;甚至查看了Console字符编码相关的注册表,依然没有发现问题。难道NET Core到了RC2,莫非连一些常用的编码都不支持吗? 现在给大家重现这个问题,通过VS 2015创建一个.NET Core控制台程序。 我们在Main方法中只编写了如下几行行程序,将输入的字符串直接打印出来。 1: using System; 2:?
3: namespace App 4: {
5: public class Program 6: {
7: static void Main(string[] args) 8: {
9: while (true) 10: {
11: Console.WriteLine(Console.ReadLine());
12: }
13: }
14: }
15: }
运行程序并分别输入中文和英文,我们会发现输入的中文显示为乱码。 为了进一步证明.NET Core对编码的局限,我们按照如下的方式调用Encoding的GetEncoding方法分别获取两种中文编码:GB2312和CP936。 3:?
6: 7: {
10: try
12: Console.WriteLine(Encoding.GetEncoding(936)); 14: catch (Exception ex)
16: Console.WriteLine(ex.Message);
17: }
18:?
19: 20: { 21: Console.WriteLine(Encoding.GetEncoding("GB2312")); 22: }
23: 24: { 25: Console.WriteLine(ex.Message);
26: }
27: }
28: }
29: }
程序执行结果证明,上述两种中文编码均不支持。 我们提供的两种中文编码在默认情况下都不支持,是因为默然情况下它们的EncodingProvider没有注册。上面显示的错误消息其实也提到了这一点,并且提到一个用于注册EncodingProvider的方法(Encoding.RegisterProvider)。于是我们按照下面的方式注册一个CodePagesEncodingProvider。 11: Console.WriteLine(Encoding.GetEncoding(936));
15: Console.WriteLine(Console.ReadLine()); 17: } 19: } CodePagesEncodingProvider定义在NuGet包“System.Text.Encoding.CodePages”之中,所以我们需要现在Project.json文件中按照如下的方式注册对应的依赖。 2: ...
4: "Microsoft.NETCore.App": {
6: "version": "1.0.0-rc2-3002702" 9: },1)"> 10: ... 相关内容
推荐文章
站长推荐
热点阅读
|