一、net core编码错误
1、问题概述
using System; using System.Text; namespace ConsoleApp1 { class Program { static void Main(string[] args) { try { //UTF-8 转 GB2312 Encoding utf8 = Encoding.GetEncoding(65001); Encoding gb2312 = Encoding.GetEncoding("gb2312"); byte[] temp = utf8.GetBytes("你好"); byte[] temp1 = Encoding.Convert(utf8, gb2312, temp); string result = gb2312.GetString(temp1); Console.WriteLine(result); } catch (Exception ex) { Console.WriteLine(ex.Message); } Console.Read(); } } }
运行结果:
2、解决方法
上面的大概意思是Encoding 不支持GB2312编码,是因为默然情况下它们的EncodingProvider没有注册。需要使用Encoding.RegisterProvider
方法进行注册Provider。
using System; using System.Text; namespace ConsoleApp1 { class Program { static void Main(string[] args) { try { //注册 Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); //UTF-8 转 GB2312 Encoding utf8 = Encoding.GetEncoding(65001); Encoding gb2312 = Encoding.GetEncoding("gb2312"); byte[] temp = utf8.GetBytes("你好"); byte[] temp1 = Encoding.Convert(utf8, gb2312, temp); string result = gb2312.GetString(temp1); Console.WriteLine(result); } catch (Exception ex) { Console.WriteLine(ex.Message); } Console.Read(); } } }
运行效果:
未完待续。。。