« 想更了解QQ吗?QQ所有文件和目录的作用解释和分析收集(转)« »惠普利用新媒体开拓中小企业市场(话题广告文章) »
C#获取网页源码,自动判断网页字符集编码

最近开始打算重新学习C#,并且尝试做点C#练习。而最让我感兴趣的还是和网站相关的东西。那就做个获取网站源码,采集文章的功能吧。

根据网上的资料,使用WebClient来获取源码,很容易就能得到网页源码。但是,发现,不同网站的网页字符编码就不一样的,如何自动分别不同网站的字符编码,而正确解释网页中的汉字呢。在C#里,提供了丰富的工具类库,可以轻松的转码。但是,却发现不能自动获取网站上的字符编码而自动正确的解释源码,而导致汉字显示乱码。以前我也用JAVA做过这样的功能,获取网站源码,同样,在JAVA的各种获取网站源码的类库里,也不能自动根据网页字符编码自动正确解释编码,只能我们自己手动来做了。

我的解决办法是先采用系统默认的编码从stream里得到源码,再使用正则表达式获取源码中的[获取网页字符编码描述信息],这个信息,一般来说,网页里都会有的,在网页源码的<head>里,类似这样的代码:<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />(其实不一样完全这样,有些不规范的,没有双引号,或者最后面没有/闭合,所以,正则表达式得考虑周全些),从这个代码里来获取编码信息,再判断系统当前的默认编码是否和这个一样,如果不同,再使用网页中取到的编码来重新从stream里解释取得网页源码。

源码如下:(下面这段代码是一个完整的获取网页源码,且自动正确解释汉字)

[CODE=csharp] using System.Net; using System.IO; using System.Text.RegularExpressions; private string getHtml(string url, string charSet)//url是要访问的网站地址,charSet是目标网页的编码,如果传入的是null或者"",那就自动分析网页的编码 { WebClient myWebClient = new WebClient(); //创建WebClient实例myWebClient // 需要注意的: //有的网页可能下不下来,有种种原因比如需要cookie,编码问题等等 //这是就要具体问题具体分析比如在头部加入cookie // webclient.Headers.Add("Cookie", cookie); //这样可能需要一些重载方法。根据需要写就可以了 //获取或设置用于对向 Internet 资源的请求进行身份验证的网络凭据。 myWebClient.Credentials = CredentialCache.DefaultCredentials; //如果服务器要验证用户名,密码 //NetworkCredential mycred = new NetworkCredential(struser, strpassword); //myWebClient.Credentials = mycred; //从资源下载数据并返回字节数组。(加@是因为网址中间有"/"符号) byte[] myDataBuffer = myWebClient.DownloadData(url); string strWebData = Encoding.Default.GetString(myDataBuffer); //获取网页字符编码描述信息 Match charSetMatch = Regex.Match(strWebData, "

这样就可以了,不信你试试,对了,如果你有什么更方便的方法请告诉我哦~~~~

这段代码里有很多注释,如果你也想做个网页采集功能,可以学一下,嘿嘿。

 


Tags: C#  网页源码  CSDN  爬虫  乱码   |

原创文章如转载,请注明:转载自:巴士飞扬-技术BLOG : http://www.busfly.net/

本文链接地址:http://www.busfly.net/post/cs-web-WebClient-html.html

如果你喜欢本文,请顶一下,支持我,你的支持是我继续发好文章的最大动力。谢谢。
好东西需要分享,快把本文发给你的朋友吧~!~

     
相关文章:
开始研究Lucene,这是工作  (2008-7-19 18:48:51)
CSDN博客,真的很NB  (2008-3-7 11:18:33)
为了技术,再开两技术博客  (2008-3-6 10:30:35)
  • 引用此留言  8.weblogical  
  • 如果网页源代码里 没有<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 你怎么办?
  • [删除]2008-12-19 15:56:30 回复该留言
  • 引用此留言  7.faunus  
  • 这个并不好,
    去看FIREFOX的源代码的
    判字符集远远比这个复杂的多。
  • [删除]2008-10-28 20:20:53 回复该留言
  • 引用此留言  2.neeke  http://www.ineeke.cn
  • 和我写那个差不多嘛,嘿嘿~
    巴士飞扬 于 2008-9-30 12:32:59 回复
    差不多?差别可大了,你那个只能以你电脑里的默认编码来解释网页,一般我们中国的电脑上默认的都是GBK或者相关的编码,你使用你的那个源码访问一下UTF-8的网站看看,看看结果是不是有中文的地方全是乱码。
  • [删除]2008-9-23 12:15:52 回复该留言




◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。
网站分类
分类最近文章
最近发表
最新评论及回复
最近留言
热文排行
随机推荐文章
Powered By Z-Blog   STYLE by busfly . FatMouse
Copyright © 2007 巴士飞扬技术博客. . 沪ICP备07027972号. 会员群1(J2EE为主):3769186.