【问题标题】:Character encoding Microsoft.XmlHttp in VbscriptVbscript 中的字符编码 Microsoft.XmlHttp
【发布时间】:2011-06-04 17:03:52
【问题描述】:

我正在编写一个 vbscript 从网页中提取一些数据,剥离一些关键信息并将其写入文件。

目前我访问页面并将文件内容保存到字符串的脚本是这样的:

Set WshShell = WScript.CreateObject("WScript.Shell")
Set http = CreateObject("Microsoft.XmlHttp")

'Load Webpage where address is URL
http.open "GET", URL, FALSE
http.send ""
'Assign webpage contents as a string to variable called Webpage
WEBPAGE = http.responseText

我需要将内容保存为字符串,以便可以在其上使用正则表达式来提取我需要的内容。

此脚本运行良好,除非页面包含非标准字符(例如 é)。当页面包含这样的内容时,脚本会抛出错误并停止。

我猜这与编码有关,但我不知道如何解决它。谁能指出我正确的方向?谢谢大家

编辑

感谢这里的帮助,我意识到我问错了问题!事实证明我下载的内容很好 - 问题是,之后我试图编辑它并将其写入文件,但文件格式错误。我有这个:

Set objTextFile = objFSO.OpenTextFile(OutputFile, 8, True,)

改成这样:

Set objTextFile = objFSO.OpenTextFile(OutputFile, 8, True, -1)

似乎已经解决了。多么疯狂的世界,嗯?感谢您的帮助。

【问题讨论】:

    标签: vbscript character-encoding


    【解决方案1】:

    您可能需要在发送前设置正确的标头块

    例如,以下仅为示例。您需要找出这对您的网站来说究竟是什么

       http.open "GET", URL, FALSE
        http.SetRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"
        http.SetRequestHeader "Accept", "text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5"
        http.SetRequestHeader "Accept-Language", "en-us,en;q=0.5"
        http.SetRequestHeader "Accept-Charset", "ISO-8859-1,utf-8;q=0.7,*;q=0.7"
        http.send ""
    

    编辑:

    这个怎么样。在这里可以正常使用

    Dim XMLHttpReq,URL,WEBPAGE
    Const Eacute  = "%C3%89"
    
    Set XMLHttpReq = CreateObject("MSXML2.ServerXMLHTTP")
    
    URL = "http://en.wikipedia.org/wiki/%C3%89"
    'Load Webpage where address is URL
    XMLHttpReq.Open "GET", URL, False
    XMLHttpReq.send ""
    'Assign webpage contents as a string to variable called Webpage
    WEBPAGE = XMLHttpReq.responseText
    WEBPAGE = Replace(WEBPAGE, Eacute, "É")
    'Debug.Print WEBPAGE
    

    在这种情况下,E 尖音符返回字符串 %C3%89,如果需要,您可以将其强制为您选择的任何字符。

    EDIT2:

    补充一下,如果您使用 VBScript 执行此操作,您可能会发现此方法很有用

    Dim XMLHttpReq, URL, WEBPAGE, fso, f
    Const Eacute = "%C3%89"
    Set XMLHttpReq = CreateObject("MSXML2.ServerXMLHTTP")
    URL = "http://en.wikipedia.org/wiki/%C3%89"
    XMLHttpReq.Open "GET", URL, False
    XMLHttpReq.send ""
    WEBPAGE = XMLHttpReq.responseText
    
    Save2File WEBPAGE, "C:\Users\osknows\Desktop\test.txt"
    
    Sub Save2File (sText, sFile)
        Dim oStream
        Set oStream = CreateObject("ADODB.Stream")
        With oStream
            .Open
            .CharSet = "utf-8"
            .WriteText sText
            .SaveToFile sFile, 2
        End With
        Set oStream = Nothing
    End Sub
    

    【讨论】:

    • 除非我是笨蛋,否则我还是想不通。以这个页面为例:en.wikipedia.org/wiki/É - 对我来说它看起来像是 utf-8,但是当我把它放在接受字符集中时,它仍然会抛出同样的错误。我想我可以将文件加载为二进制文件,但我不想这样做,因为我想在输出字符串之前对其进行操作。
    • 感谢您的帮助!
    • 其实,忍耐一下,我在玩……可能已经去了!
    • 啊,实际上,我好像在这里问错了问题。你说得对,这确实有效。一旦我把它拉到一个破坏它的变量中,这就是我试图用它做的下一步。哦!让我玩一玩,看看我能不能解决它。非常感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 2012-04-07
    • 2021-02-07
    • 2011-01-15
    • 2017-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多