.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.html

  • 這段英文仍是勉勉強強看懂了,意思應該是不支持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);
}
相關文章
相關標籤/搜索