.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);
}
posted @ 2018-01-17 16:17  ismatch  阅读(351)  评论(0编辑  收藏  举报