NCrawler爬取中文网页时乱码问题的解决方法

   

在使用.NET下的NCrawler爬取网页信息时,如果网页以GBK或GB2312进行编码,则下载的内容会出现乱码。

查找原因,发现在NCrawler.HtmlProcessor项目下HtmlDocumentProcessor.cs中的Process()方法使用htmlDoc.DetectEncoding(reader)进行页面编码检测,出现中文乱码情况。

改用HttpWebResponse中返回的CharacterSet进行编码判断,发现部分网页的Header中未定义CharacterSet,会出现乱码。调试发现这类网页的HttpWebResponse中返回的CharacterSet被统一设置为ISO-8859-1。查阅MSDN发现CharacterSet的缺省设置为ISO-8859-1。

   

   

   

修改Process(),使用以下方法可以有效解决乱码问题:

Encoding documentEncoding = Encoding.GetEncoding(propertyBag.CharacterSet);
if (propertyBag.CharacterSet == "ISO-8859-1")
{
  documentEncoding = htmlDoc.DetectEncoding(reader);
}

   

原文地址:https://www.cnblogs.com/leoyoungblog/p/5075847.html