柳永法:vbs或asp采集文章时网页编码问题

作者:yongfa365 来源:yongfa365.com 时间:2009-02-04 10:50:00 

研究网页编码很长时间了,因为最近要设计一个友情链接检测的VBS脚本,而与你链接的人的页面很可能是各种编码,以前采取的方法是:如果用GB2312查不到再用UTF-8查,再找不到证明对方没有给你做链接虽然不是100%正确,但也差不多了,这两种编码用的人比较多,偶然间在收藏夹里的一个地址看到的一个思路,终于可以在采集文章时自动判断网页的编码了。因为研究过程中这个问题困扰很久,虽然现在觉得简单了,想必很多人还在找,所以把这三个函数贴出来。

'/*=========================================================================     
' * FileName    GetWebCodePage.vbs  
' * Author      yongfa365  
' * Version     v2.0  
' * WEB         http://www.yongfa365.com  
' * Email       yongfa365[at]qq.com  
' * FirstWrite  http://www.yongfa365.com/Item/GetWebCodePage.vbs.html  
' * MadeTime    2008-01-29 20:55:46  
' * LastModify  2008-01-30 20:55:46  
' *==========================================================================*/  
 
 
Call getHTTPPage("http://www.baidu.com/")  
Call getHTTPPage("https://www.aspxhome.com/")  
Call getHTTPPage("http://www.yongfa365.com/")  
Call getHTTPPage("http://www.cbdcn.com/")  
Call getHTTPPage("http://www.cidianwang.com/")   
  
 
'得到匹配的内容,返回数组  
'getContents(表达式,字符串,是否返回引用值)  
'msgbox getContents("a(.+?)b", "a23234b ab a67896896b sadfasdfb" ,True)(0)  
 
Function getContents(patrn, strng , yinyong)   
 
    On Error Resume Next 
    Set re = New RegExp 
    re.Pattern = patrn  
    re.IgnoreCase = True 
    re.Global = True 
    Set Matches = re.Execute(strng)  
    If yinyong Then 
        For i = 0 To Matches.Count -1  
            If Matches(i).Value<>"" Then RetStr = RetStr & Matches(i).SubMatches(0) & "柳永法" 
        Next 
    Else 
        For Each oMatch in Matches  
            If oMatch.Value<>"" Then RetStr = RetStr & oMatch.Value & "柳永法" 
        Next 
    End If 
    getContents = Split(RetStr, "柳永法")  
End Function 
 
Function getHTTPPage(url)  
    On Error Resume Next 
    Set xmlhttp = CreateObject("MSXML2.XMLHTTP")  
    xmlhttp.Open "Get", url, False 
    xmlhttp.Send  
    If xmlhttp.Status<>200 Then Exit Function 
    GetBody = xmlhttp.ResponseBody  
    '在此的思路是,先根据返回的字符串找,找文件头,如果还没有的话就用GB2312,一般都能直接匹配出编码。  
    '在返回的字符串里看,虽然中文是乱码,但不影响我们取其编码,  
    GetCodePage = getContents("charset=[""']*([^"",']+)", xmlhttp.ResponseText , True)(0)  
    '在头文件里看编码  
     If Len(GetCodePage)<3 Then GetCodePage = getContents("charset=[""']*([^"",']+)", xmlhttp.getResponseHeader("Content-Type") , True)(0)  
    If Len(GetCodePage)<3 Then GetCodePage = "gb2312" 
    Set xmlhttp = Nothing 
    '下边这句在正式使用时要屏蔽掉  
    WScript.Echo url & "-->" & GetCodePage  
    getHTTPPage = BytesToBstr(GetBody, GetCodePage)  
End Function 
 
 
Function BytesToBstr(Body, Cset)  
    On Error Resume Next 
    Dim objstream  
    Set objstream = CreateObject("adodb.stream")  
    objstream.Type = 1  
    objstream.Mode = 3  
    objstream.Open 
    objstream.Write Body  
    objstream.Position = 0  
    objstream.Type = 2  
    objstream.Charset = Cset  
    BytesToBstr = objstream.ReadText  
    objstream.Close 
    Set objstream = Nothing 
End Function 

 

标签:xmlhttp,采集,编码,问题,asp
0
投稿

猜你喜欢

  • js换图片效果可进行定时操作

    2023-08-23 07:45:34
  • MySQL多实例安装开机自启动服务配置过程

    2024-01-14 14:32:17
  • Python StringIO及BytesIO包使用方法解析

    2022-12-24 15:34:26
  • laravel 实现阿里云oss文件上传功能的示例

    2023-06-13 20:39:26
  • Python Flask实现图片验证码与邮箱验证码流程详细讲解

    2021-10-19 06:35:29
  • 将Django项目迁移到linux系统的详细步骤

    2021-02-11 02:13:09
  • pytorch读取图像数据转成opencv格式实例

    2021-01-31 03:12:22
  • python实现基于两张图片生成圆角图标效果的方法

    2023-04-20 17:58:56
  • python爬虫学习笔记之Beautifulsoup模块用法详解

    2022-06-27 12:30:03
  • Numpy实现卷积神经网络(CNN)的示例

    2022-10-06 17:44:17
  • 如何让框架的网页背景透明

    2008-04-08 14:24:00
  • mysql复制表的几种常用方式总结

    2024-01-25 12:11:59
  • Python格式化输出字符串的五种方法总结

    2023-03-30 02:07:42
  • Flask框架请求钩子与request请求对象用法实例分析

    2021-11-23 20:14:48
  • Python实现的生成自我描述脚本分享(很有意思的程序)

    2023-08-14 20:21:06
  • Python使用re模块实现信息筛选的方法

    2021-10-10 09:34:46
  • mysql 重启方法(初学者)

    2010-12-03 16:40:00
  • xmind2022下载非试用超详细图文教程

    2023-06-03 18:52:06
  • 如何用python 实现老板键功能

    2022-09-30 10:13:25
  • Mysql实现定时清空一张表的旧数据并保留几条数据(推荐)

    2024-01-17 06:38:11
  • asp之家 网络编程 m.aspxhome.com