我的知识:网络,广告,生意,销售,管理

日志主页 | 链接 | 标签 | 留言 | 管理

耀哥与你共享人生:

天马行空,记忆尘封,回头皆空!!
缘生缘灭,万事兼随缘,珍惜现在!

 

解决采集UTF-8网页乱码问题

yaoee.com, 发表于:2010-02-18 18:12:53, 分类:IT知识 浏览( ) 评论( )  收藏这篇日志

解决采集UTF-8网页乱码问题

 

曾经好像有人写过一个关于采集UTF-8网页出现乱码问题,但是需要在数据库中增加一个字段用来标识网页的编码,而且在设置站点中需要分别指定,如果有几个站点倒无妨,可是我要采集几百个站点的数据,这就有点麻烦了,今天调试了一下子,总算是可以智能判断了,理论上不管是GB2312还是UTF-8,都不会出现乱码,当然有些网页代码如果写的不标准可能会有点问题。

修改方法:

找到admin/collect/inc/Function.asp这个文件,找到这个函数,红色代码为添加的内容,其它不需要改动

Function ResponseStrToStr(f_Body_Str)
 Dim ADOStreamObj
 Set ADOStreamObj = Server.CreateObject("Adodb.Stream")
 ADOStreamObj.Type = 1
 ADOStreamObj.Mode = 3
 ADOStreamObj.Open
 ADOStreamObj.Write f_Body_Str
 ADOStreamObj.Position = 0
 ADOStreamObj.Type = 2
 ADOStreamObj.Charset = "GB2312"
 ResponseStrToStr = ADOStreamObj.ReadText
 ADOStreamObj.Close
 Set ADOStreamObj = Nothing
 if InStr(ResponseStrToStr, "charset=utf-8") <> 0 or InStr(ResponseStrToStr, "charset=UTF-8") <> 0  then
  Set ADOStreamObj = Server.CreateObject("Adodb.Stream")
  ADOStreamObj.Type = 1
  ADOStreamObj.Mode = 3
  ADOStreamObj.Open
  ADOStreamObj.Write f_Body_Str
  ADOStreamObj.Position = 0
  ADOStreamObj.Type = 2
  ADOStreamObj.Charset = "utf-8"
  ResponseStrToStr = ADOStreamObj.ReadText
  ADOStreamObj.Close
  Set ADOStreamObj = Nothing
 end if

End Function

如果你要采集的网站大部分都是UTF-8编码的,可以将这个函数中所有的"GB2312"改为"UTF-8","UTF-8"改为"GB2312",也就是将函数中加粗部分互换一下,这样也许会提高速度。

即使这样可能有些网站会出现问题,因为我只对网页代码中是否包含"charset=UTF-8"进行了判断,如果一个UTF-8编码的网页代码写的不是很标准,例如没有在head区域中定义charset=UTF-8",这时就会有问题,不过这应该是少数。


标签: 代码
正在读取日志的评论数据,请稍后……
正在加载日志评论签写框,请稍后……
成员登录通道
正在载入成员登录通道...
BLOG 日志归档
BLOG 站内搜索

BLOG 友情链接