现在的位置: 首页 > 综合 > 正文

[分享]解决采集UTF-8网页乱码问题

2012年06月20日 ⁄ 综合 ⁄ 共 1292字 ⁄ 字号 评论关闭
文章目录

[分享]解决采集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",这时就会有问题,不过这应该是少数。

本人不是专门做程序的,所以对有些函数的用法不太熟悉,我想以上代码应该还可以再做改进,有兴趣的朋友可以试一下

抱歉!评论已关闭.