.NET CORE中问题集合

一、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();
        }
    }
}

运行效果:

未完待续。。。

原文地址:https://www.cnblogs.com/qtiger/p/14452788.html