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

最新文章

  1. 【USACO 2.3】Money Systems(dp)
  2. AJAX XML返回类型
  3. iOS开发-【C语言】三目运算符
  4. 为什么你还在用嵌入式的方式来使用mod_wsgi?
  5. VS Extension: Create a txt file and set the content
  6. sublime text 3 中 SFTP插件 的 配置
  7. thinkphp 查询
  8. Intellij IDEA创建Maven Web项目
  9. python语法_列表生成器_生成器_迭代器_异常捕获
  10. python语言相关语法基础
  11. MySQL导入导出实践
  12. linux存储管理之自动挂在
  13. bootstrap-select插件 多选框
  14. android studio设计模式和文本模式切换
  15. EF6使用Mysql,踏过的那些坑
  16. 学习ASP.NET之旅
  17. 20155303 2016-2017-2 《Java程序设计》第六周学习总结
  18. 玩android 遇到的问题-2014年1月15日
  19. Python虚拟开发环境pipenv
  20. TensorFlow从1到2(十)带注意力机制的神经网络机器翻译

热门文章

  1. 【洛谷九月月赛T1】签到题(bsgs)(快速乘)
  2. vue和jQuery的区别
  3. day13学python 协程+事件驱动
  4. 8、insert、delete、update语句总结
  5. mysqldump导出数据不带时区信息的问题
  6. [ActionScript 3.0] 翻牌效果,运用语法rotationY,PerspectiveProjection
  7. String 源码浅析(一)
  8. php中的date和strtotime函数妙用
  9. python学习笔记1.3
  10. Angular material mat-icon 资源参考_Toggle