.Net Core GB2312编码问题
1.今天抓取了一个网页的源代码.发现中文是乱码的,马上第一反应是编码问题.....
2.仔细一看基于WebClient写的代码,还真的是没有设置编码...
/// <summary>
/// 简单获取html源代码并且转换为IHtmlDocument
/// </summary>
/// <returns></returns>
public IHtmlDocument GetHtmlString(string address)
{
var str = string.Empty;
using (var wc = new WebClient())
{
wc.Encoding = encoding;
str = wc.DownloadString(address);
}
var parser=new HtmlParser();
return parser.Parse(str);
}
3.用浏览器查看网页的源代码是gb2312,遂直接加上编码
- 新鲜出炉的代码
/// <summary>
/// 简单获取html源代码并且转换为IHtmlDocument
/// </summary>
/// <returns></returns>
public IHtmlDocument GetHtmlString(string address,Encoding encoding=null)
{
if (encoding == null)
{
encoding=Encoding.GetEncoding("GB2312");
}
var str = string.Empty;
using (var wc = new WebClient())
{
wc.Encoding = encoding;
str = wc.DownloadString(address);
}
var parser=new HtmlParser();
return parser.Parse(str);
}
4.然而残酷的现实告诉我们....事情没有那么简单,此处有蹊跷
'GB2312' is not a supported encoding name. For information on defining a custom encoding, see the documentation for the Encoding.RegisterProvider method.
- 这段英文还是勉勉强强看懂了,意思应该是不支持GB2312编码
5.原因是找到了,然而还是难倒了我...遂抛出面向百度大法(Google打不开,no way)
- 添加一个模块(包):System.Text.Encoding.CodePages
- 可以在程序包管理台敲命令 install-packget System.Text.Encoding.CodePages 进行安装(或者直接在NuGet上搜索'System.Text.Encoding.CodePages'进行安装)
6.最后注册一下模块(我也不知道是不是应该这样描述)
/// <summary>
/// 简单获取html源代码并且转换为IHtmlDocument
/// </summary>
/// <returns></returns>
public IHtmlDocument GetHtmlString(string address,Encoding encoding=null)
{
// 注册模块
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
if (encoding == null)
{
encoding=Encoding.GetEncoding("GB2312");
}
var str = string.Empty;
using (var wc = new WebClient())
{
wc.Encoding = encoding;
str = wc.DownloadString(address);
}
var parser=new HtmlParser();
return parser.Parse(str);
}
![]()
作者:丹麦的面包不单卖
出处: http://www.cnblogs.com/MySdm/
微信公众账号:丹麦的面包不单卖
扫一扫左侧的二维码(或者长按识别二维码),关注本人微信公共号,获取更多资源。(其实啥都没有,我只是单纯的占个位置)
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。