Web Spider提取编码方法总结

概要:
1,通过分析Header提取编码
2,通过分析BOM(Byte Order Mark)提取编码
3,通过分析页面的meta提取编码
4,通过字节流分析检测编码

正文:
总结一下。目前有四种方法
1,通过分析Header提取编码。
 这个也是比较简单。也是大家常用的,不过既然是总结。那还是帖一下代码吧。


2,通过分析BOM(Byte Order Mark)提取编码
通过BOM检测编码
说明:上面的用到的GetByteContent方法,在3中有;
3,通过分析页面的meta提取编码
这个也是大家常用。但是这里不需要抓两次。一次就可以分析了
通过Meta提取编码

4,通过字节流分析检测编码
 就是一个byte一个byte的分析。网上的高手太多了,我这等菜鸟就不在这里献丑了。
 已经有网友写出来了。高手Lion出品。2K多行代码。;)*—¥……#……#%……
 我测试下。效果不错!可以从下面的URL获得需要的信息
 http://www.cnblogs.com/lion.net/archive/2005/02/24/108395.html

5,一点问题
我在测试中。通过
StreamReader sr = new StreamReader(stream, Encoding.GetEncoding("utf-8"));

StreamReader sr = new StreamReader(stream, Encoding.UTF8);
结果竟然是不同的(前者正常,后者乱码)。
而Encoding.UTF8.Equals(Encoding.GetEncoding("utf-8"))是true
有那位朋友知道原因的。诚请指教。thanks!

posted @ 2007-01-24 08:04 kwklover 阅读(4109) 评论(12) 编辑 收藏

 回复 引用   
#1楼2007-01-24 10:05 | Max[未注册用户]
一个内容,首页上发了三次!
你可不可以想好了再发首页?

 回复 引用 查看   
#2楼2007-01-24 10:33 | 高海东      
有转换例子吗
 回复 引用 查看   
#3楼[楼主]2007-01-24 10:35 | kwklover      
@Max ?
一个内容,首页上发了三次 ?
请指出

cnblogs是用来分享交流技术的。难道经过精心思考和写作的就不应该发首页?
至于两次都是关于同一个问题。也是希望与园友们不断交流和深入而已。

关于WebSpider编码的问题。总共才写了两篇文章。
即使相同,又何来三次?
再说。内容完全就不相同。
请问,你都认真阅读过?

如果你只希望获得最终完善的资料。
我的blog并不适合您。您完全可以忽略不看。
如果因为发到首页影响到您的有效阅读。
我深表遗憾。因为我没有义务照顾每一个人的阅读趣味。
cnblogs是一个开放的平台!

 回复 引用   
#4楼2007-01-24 19:33 | A.Z[未注册用户]
utf-8 , utf8
 回复 引用 查看   
#5楼2007-01-24 23:39 | Klesh Wong      
博客园人多起来之后,像这种自己不作贡献,稍微看到别人写的不太合自己口味就横加指责的人就多了起来。


我要支持你一下,因你写得很好!这个世界连编码都搞不清楚是什么东西的程序员太多了。

 回复 引用   
#6楼2007-02-21 00:08 | html anaylser[未注册用户]
如何将本地html文档直接装入到document 类对象?

为什么有些动态网也代码里没什么内容?

 回复 引用   
#7楼2007-04-05 14:16 | nbwebman[未注册用户]
我在取http://daohang.google.cn页面的时候碰到了问题。看到它页面是用
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />的。但是我用
WebRequest request = WebRequest.Create("http://daohang.google.cn");
//定义对上面WEB请求的反应
WebResponse response = request.GetResponse();
//取得WEB响应的数据流
Stream resStream = response.GetResponseStream();
//根据上面定义的数据流,以默认编码的方式定义一个读数据流
StreamReader sr = new StreamReader(resStream, System.Text.Encoding.Default);
// 读取数据流中的内容
string Result = sr.ReadToEnd();
//关闭数据流
resStream.Close();
//关闭读数据流并释放资源
sr.Close();
return Result;
去取的时候中文显示的是???问号。而且用 StreamReader sr = new StreamReader(resStream, System.Text.Encoding.GetEncoding("utf-8"));也同样不行。

 回复 引用 查看   
#8楼[楼主]2007-04-05 20:29 | kwklover      
@nbwebman
google的http://daohang.google.cn确实比较奇怪.
通过header分析。得到的编码是 "ISO-8859-1"
而通过Meta分析。得到的是编码utf-8 (没有BOM信息)
再通过byte分析。得到的是编码ASCII

不过用上面三种编码提取web html,得到的中文都是?????
我现在也解释不了。为什么会出现这样的问题。

 回复 引用   
#9楼2007-04-06 09:25 | nbwebman[未注册用户]
虽然问题还没有解决。但是还是很感谢你的分析。大家继续一起研究。呵呵
 回复 引用   
#11楼2007-08-27 04:34 | 淡淡的[未注册用户]
这个博客很好, 收藏一下。