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

'/*=========================================================================   
' * 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

(0)

相关推荐

  • js 显示base64编码的二进制流网页图片

    Data URI scheme. Data URI scheme是在RFC2397中定义的,目的是将一些小的数据,直接嵌入到网页中,从而不用再从外部文件载入.比如上面那串字符,其实是一张小图片,将这些字符复制黏贴到火狐的地址栏中并转到,就能看到它了,一张2*2的白色gif图片. 在上面的Data URI中,data表示取得数据的协定名称,image/gif是数据类型名称,base64 是数据的编码方法,逗号后面就是这个image/gif文件base64编码后的数据. 目前,Data URI sc

  • ASP UTF-8编码生成静态网页的函数

    以下函数采用FSO对象,文件位置在FSO.ASP.FSO对象的文件编码属性只有三种,系统默认,Unicode,ASCII,并没有我们要的utf-8,所以一般中文系统上使用FSO对象生成的文件都是gb2312网页编码格式,无法生成UTF-8编码,因此,英文等拉丁语系和中文可以正常显示,但象俄语等非拉丁语系,页面就会出现乱码. 复制代码 代码如下: function createfile(sfilename,scontent) set fso=server.CreateObject("scripti

  • 判断网页编码的方法python版

    在web开发的时候我们经常会遇到网页抓取和分析,各种语言都可以完成这个功能.我喜欢用python实现,因为python提供了很多成熟的模块,可以很方便的实现网页抓取. 但是在抓取过程中会遇到编码的问题,那今天我们来看一下如何判断网页的编码: 网上很多网页的编码格式都不一样,大体上是GBK,GB2312,UTF-8等. 我们在获取网页的的数据后,先要对网页的编码进行判断,才能把抓取的内容的编码统一转换为我们能够处理的编码,避免乱码问题的出现. 下面介绍两种判断网页编码的方法: 总结:第二个方法很准

  • ASP+FSO生成的网页文件默认编码格式以及转换成UTF-8编码方法

    具体特征如下: 1.通过模板实现俄文正常. 2.通过后台数据库生成的静态俄文信息,后台显示正常, 前台乱码. 3.英文正常. 和该主题相关的类似或不同表达 FSO写UTF-8编码文件 FSO怎么才能生成utf-8编码的文件 FSO生成的文件默认是什么编码格式 如何转换成UTF-8编码 FSO生成静态网页的问题 ASP中用FSO生成文件代码如下 复制代码 代码如下: function createfile(sfilename,scontent) set fso=server.CreateObjec

  • asp.net 网页编码自动识别代码

    复制代码 代码如下: using System; using System.Net; using System.Text; using System.Text.RegularExpressions; class Program { // 获取网页的HTML内容,根据网页的charset自动判断Encoding static string GetHtml(string url) { return GetHtml(url, null); } // 获取网页的HTML内容,指定Encoding sta

  • 多种语言(big5\gbk\gb2312\utf8\Shift_JIS\iso8859-1)的网页编码切换解决方案归纳

    1.response.setContentType("text/html; charset=GB2312"); 或者response.setContentType("text/html; charset=UTF-8"); charset前面留一个空格 2.头文件包含 3. 一般处理是将在网页上提交的中文转码为Unicode存储在数据库中,取出来的 时候,用自动转码(ContentType="text/html;charset=gb2312"或Co

  • asp.net HttpWebRequest自动识别网页编码

    复制代码 代码如下: static string GetEncoding(string url) { HttpWebRequest request = null; HttpWebResponse response = null; StreamReader reader = null; try { request = (HttpWebRequest)WebRequest.Create(url); request.Timeout = 20000; request.AllowAutoRedirect

  • 网页语言编码及asp乱码问题解决方案

    最近公司有一个日文项目,由于之前使用的是自己开发的中文CMS,并没有将语言包分离,在网站建设调试过程中出现了令人头疼的乱码问题. 乱码出现的原因 由于各个字符编码的储存空间不一样,所以当使用不同的字符读取数据时,当字符空间过小,就不能正常显示了. 比如说中文字符的字符集一般是gb2312,如果用utf-8强制读取改变gb2312的字符,就有可能出现乱码.因为utf-8的字符集储存空间大于gb2312,当使用utf-8读取时,有些字符gb2312的编码中是不存在的,不存在的字符自然会出现乱码了.对

  • Base64编码加密JS代码网页版

    你可将本页保存后上传到你的网站中,这样你就拥有了一个Base64编码加密.解密的功能页面,让需要的用户去访问你的网页. Base64编码加密 BODY { MARGIN-TOP: 0px; FONT-SIZE: 9pt; MARGIN-LEFT: 0px; MARGIN-RIGHT: 0px; FONT-FAMILY: "宋体" } A { FONT-WEIGHT: 400; FONT-SIZE: 9pt; COLOR: black; TEXT-DECORATION: none } A

  • php 判断网页是否是utf8编码的方法

    //判断编码 复制代码 代码如下: $encode = mb_detect_encoding($q, array('GB2312','GBK','UTF-8'));echo $encode."<br/>";if($encode=="GB2312"){    $q = iconv("GBK","UTF-8",$q);}else if($encode=="GBK"){    $q = iconv(&

随机推荐