vbs或asp采集文章时网页编码问题

所属分类: 网络编程 / ASP编程 阅读数: 1658
收藏 0 赞 0 分享
'/*=========================================================================   
' * Intro       研究网页编码很长时间了,因为最近要设计一个友情链接检测的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("http://www.google.com/")   
Call getHTTPPage("http://www.yongfa365.com/")   
Call getHTTPPage("http://www.cbdcn.com/")   
Call getHTTPPage("http://www.csdn.net/")   

  
'得到匹配的内容,返回数组   
'getContents(表达式,字符串,是否返回引用值)   
'msgbox getContents("a(.+?)b", "a23234b ab a67896896b sadfasdfb" ,True)(0)   

Function getContents(patrn, strng , yinyong)   
'by www.yongfa365.com 转载请保留链接,以便最终用户及时得到最新更新信息   
    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   
    '柳永法(www.yongfa365.com)在此的思路是,先根据返回的字符串找,找文件头,如果还没有的话就用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
更多精彩内容其他人还在看

把网页中的(电话,qq等数字)生成图片的ASP程序

下面的代码可以将网页中一些防止别人直接复制或采集的不错的隐藏部分数字信息,例如电话可以起到防止别人搜索。
收藏 0 赞 0 分享

asp生成不需要数据库的中奖码

有一个思路是:将一批唯一中奖码,录入的到数据库,中奖时,取出来一条,做一个标记,把中奖码告诉
收藏 0 赞 0 分享

asp遍历目录及子目录的函数

asp遍历目录以及目录下文件的函数- 从网上找的不过都用不了,自己用Emeditor修正了一下
收藏 0 赞 0 分享

asp数据库连接rs("user.id")

数据库连接,有时会出错在conn.open connstr这地方的问题,及联接查询调用rs("user.id")的问题
收藏 0 赞 0 分享

vbs或asp采集文章时网页编码问题

研究网页编码很长时间了,因为最近要设计一个友情链接检测的VBS脚本,而与你链接的人的页面很可能是各种编码
收藏 0 赞 0 分享

新手asp编程的基本法则与常见错误注意事项

在论坛看到很多帖子代码中都有一个共同的基本错误,字段类型错误。程序和数据库是紧紧相连的,数据库字段文本型或时间型的都使用单引号
收藏 0 赞 0 分享

提高SQL的执行效率的ASP的五种做法

我们用开发sql的时候会发现,有时候asp执行比较慢,我们可以用下面的方法,来提高执行效率
收藏 0 赞 0 分享

asp的offset的一个go to page第1/2页

呵,指定到第几页,用dw自带的生成的东西,我们可以参考他的思想,代码很多垃圾代码
收藏 0 赞 0 分享

asp中command的在单条记录时,有些字段显示为空的问题

网上找到一些资料,关于游标这个问题,还是无法放进去(如果方法找到的话,还可以改) 之前的sql这么写,但是没有效果有些非顺序的值会丢失
收藏 0 赞 0 分享

功能不错的asp模板类代码附下载第1/4页

在工作中,因为要用模板类,在网上找了个asp模板类,用着挺好了。完工后也按别人的思路写了模板类,这个模板类没在设计的项目中应用,只是练练笔,所以只写了简单的几个demo,有没有bug还不清楚,欢迎大家测试,指教,帮忙完善。
收藏 0 赞 0 分享
查看更多