前不久Core诞生时候,那个时候我也在项目上没时间去尝那青涩的味道。今天刚刚装上2017就等不及的试了一下。
先创建了一个控制台的应用程序,然后在Main()方法中写了几句话,就等不及的Ctrl+F5,想看看是啥效果。
1 using System; 2 3 namespace TestCoreConsole 4 { 5 class Program 6 { 7 static void Main(string[] args) 8 { 9 Console.WriteLine("这是中文输出"); 10 Console.WriteLine(Console.ReadLine()); 11 } 12 } 13 }
发现我输出的中文竟然乱码了,我当时想到应该是编码的问题,然后去调整VS的编码类型,也没有解决中文乱码的问题。
后来我调用了一次Encoding的GetEncoding获取中文编码类型
结果抛出:Unhandled Exception: System.ArgumentException: 'GB2312' is not a supported encoding name. For information on defining a custom encoding, see the documentation for the Encoding.RegisterProvider method.Parameter name: name
异常信息中提到了Encodeing.RegisterProvider,后来一看原来.NET Core 在默认情况下是没有注册EncodeProvider,需要我们们手动自己去注册。撸起袖子就注册。
需要先添加CodePagesEncoingProvider的引用,在NuGet包System.Text.Encoding.CodePages里面
using System; using System.Text; namespace TestCoreConsole { class Program { static void Main(string[] args) {
//注册EncodeProvider Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); Console.WriteLine("这是中文输出"); Console.WriteLine("This is english output."); Console.WriteLine(Console.ReadLine()); } } }
再次Ctrl+F5 就好了
这样问题是.net core 的模块化的设计原则,但是这样是否能做到跟2015以及之前的离线式的开发?这个问题先留着,日后研究。