.net core中不支持GB2312编码的问题

今天在用core实现读取文件内容时出现了中文乱码的问题,特此记录下。
 
代码如下:
        static void Main(string[] args)
        {
            string path = "F:\\1.txt";
            StreamReader sr = new StreamReader(path, Encoding.Default);
            String line;
            while ((line = sr.ReadLine()) != null)
            {
                Console.WriteLine(line.ToString());
            }
            sr.Close();
            Console.ReadLine();
        }

 

txt文件信息如下:
 

 

执行后读取的信息中文乱码:
 

 

 
那么默认编码改为“GB2312”编码试试:
        static void Main(string[] args)
        {
            string path = "F:\\1.txt";
            StreamReader sr = new StreamReader(path, Encoding.GetEncoding("GB2312"));
            String line;
            while ((line = sr.ReadLine()) != null)
            {
                Console.WriteLine(line.ToString());
            }
            sr.Close();
            Console.ReadLine();
        }

 

 
执行出现异常:
'GB2312' is not a supported encoding name. For information on defining a custom encoding, see the documentation for the Encoding.RegisterProvider method.
“GB2312”不支持编码名称。有关定义自定义编码的信息,请参阅编码文档。RegisterProvider方法。
 
解决办法:
1、下载安装System.Text.Encoding.CodePages。
 
步骤:
右键“依赖项”,点击“管理NuGet程序包”
 

 

 
在“浏览”搜索System.Text.Encoding.CodePages,选择第一个下载安装。
 

 

2、 使用“Encoding.RegisterProvider”方法进行注册。
        static void Main(string[] args)
        {
            Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
            string path = "F:\\1.txt";
            StreamReader sr = new StreamReader(path, Encoding.GetEncoding("GB2312"));
            String line;
            while ((line = sr.ReadLine()) != null)
            {
                Console.WriteLine(line.ToString());
            }
            sr.Close();
            Console.ReadLine();
        }

 

 
 
最后结果,读取文本信息成功。
 

 

 
 
posted @ 2018-12-27 15:24  流星痕  阅读(1019)  评论(0编辑  收藏  举报