ASP

本类阅读TOP10

·asp常用数据库连接方法和技巧
·无组件生成BMP验证码
·一些常用的辅助代码 (网络收藏)
·JavaScript实现的数据表格:冻结列、调整列宽和客户端排序
·VisualStudio.NET_2003及其 MSDN 下载地址
·ASP模拟MVC模式编程
·图片以二进制流输出到网页
·MD5加密算法 ASP版
·ASP.NET编程中的十大技巧
·改进 ASP 的字符串处理性能

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
找不到好的方法,如何通过HttpWebRequest获取页面的Encoding。(转)

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

今天在做一个简单的Web爬虫,用.Net的HttpWebRequest获取页面信息,然后通过Regex获取页面上的连接,进行递归爬取,开始对http://blog.sunmast.com(Encoding为UTF-8)进行爬去的时候没有发现任何错误。爬取的东西显示正常,结果对其他一些中文网站(Encoding为GB2312)进行爬去的时候,获得的都为乱码,这也是必然,于是修改代码为:

   HttpWebRequest req = (HttpWebRequest) WebRequest.Create("http://www.163.com");
   req.AllowAutoRedirect = true;
   req.MaximumAutomaticRedirections = 3;
   req.UserAgent = "Mozilla/6.0 (MSIE 6.0; Windows NT 5.1; Natas.Robot)";
   req.KeepAlive = true;
   req.Timeout = 4000;
   
   // Get the stream from the returned web response
   HttpWebResponse webresponse = null;
   try
   {
        webresponse = (HttpWebResponse) req.GetResponse();
   }
   catch(System.Net.WebException ex)
   {
        string message = "error response exception:" + ex.Message;
        Console.WriteLine(message);
   }
   if (webresponse != null)
   {
       StreamReader stream = new StreamReader
        (webresponse.GetResponseStream(), Encoding.GetEncoding("GB2312") );
        // TODO...
   }

但是,用这样的程序来获取utf-8编码的中文网站,同时又会变成乱码。查看MSDN,看到HttpWebResponse有 ContentEncoding 和 CharacterSet,于是希望根据获得的网页的编码类型来进行StreamReader的编码。于是编码测试,可是却发现测试了很多网站(包括Microsoft,Sina)等,却都无法获取这两个参数,输出的结果均为string.Empty。在Google和Baidu上搜索不到此类问题的解决方案,在CodeProject找到两篇Article,却都是通过HttpWebResponse.ContentEncoding 属性获取页面的编码,可是我获取的为什么都是空字符串?




相关文章

相关软件