.NET Core中使用GB2312编码

时间:2021-06-10 19:58:47

原文:.NET Core中使用GB2312编码

.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;
}
}