.NET Core中使用GB2312编码

.NET Core默认不支持GB2312,如果直接使用Encoding.GetEncoding(“GB2312”)的时候会抛出异常。
记录下解决方案:
1.需要添加这个NuGet包

System.Text.Encoding.CodePages

这个包可以提供Windows-1252, Shift-JIS, and GB2312 三种编码,安装好这个包后边能够使用GB2312编码。
项目重新生成后在.csproj 文件中看看有没有这个包的信息


没有的话也可以手动添加:


    
  

2.在使用GB2312编码前需要先使用Encoding.RegisterProvider方法注册

Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);

然后就可以正常使用GB2312编码,下面是我用来转码html内容的方法

public static HttpClient Client { get; } = new HttpClient();

        public static string GetHtmlByUrl(string url)
        {
            //先执行这个,不然使用GB2312报错
            Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
            try
            {
                System.Net.WebRequest wRequest = System.Net.WebRequest.Create(url);
                wRequest.ContentType = "text/html; charset=gb2312";

                wRequest.Method = "get";
                wRequest.UseDefaultCredentials = true;
                // 获取Url返回html信息
                var task = wRequest.GetResponseAsync();
                System.Net.WebResponse wResp = task.Result;
                System.IO.Stream respStream = wResp.GetResponseStream();
                //使用GB2312编码读取
                using (System.IO.StreamReader reader = new System.IO.StreamReader(respStream, Encoding.GetEncoding("GB2312")))
                {
                    return reader.ReadToEnd();
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
                return string.Empty;
            }
        }

你可能感兴趣的:(.NET Core中使用GB2312编码)