美文网首页
.NET Core中使用GB2312编码

.NET Core中使用GB2312编码

作者: Yeah的第七章 | 来源:发表于2019-01-13 15:05 被阅读0次

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

System.Text.Encoding.CodePages

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

<PackageReference Include="System.Text.Encoding.CodePages" Version="4.5.1" />

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

<ItemGroup>
    <PackageReference Include="System.Text.Encoding.CodePages" Version="4.5.1" />
  </ItemGroup>

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编码

      本文链接:https://www.haomeiwen.com/subject/sxtldqtx.html