XMLHTTP和特殊字符(例如,重音)

9
我将使用VBA中的Microsoft.XMLHTTP来获取网页正文。在这个过程中,像é这样的字符会被替换成"?"或其他无用的字符。
以下是基本代码:
Set objHTTP = CreateObject("Microsoft.XMLHTTP")

objHTTP.Open "GET", ThisWebPage, False
objHTTP.setRequestHeader "Content-Type", _
      "application/x-www-form-urlencoded; charset=UTF-8"
objHTTP.Send ("")

strResponse = objHTTP.responseText

有没有什么方法可以保留特殊字符并检索页面?
注意: 我还尝试过使用以下请求头,但没有成功:
objHTTP.setRequestHeader "Content-Type", "content=text/html; charset=iso-8859-1" 提前感谢。
解决方案: 感谢Ben.Vineyard(以及一些搜索),我能够使用以下代码提取带有重音符号的字符。
 ' Create the XMLHTTP object
  Set objHTTP = CreateObject("Microsoft.XMLHTTP")

 ' Send the request
 objHTTP.Open "GET", WhatWebPage, False
 objHTTP.Send ("")

 Dim BinaryStream
 Set BinaryStream = CreateObject("ADODB.Stream")

 With BinaryStream
    .Type = adTypeBinary
    .Open
    .Write objHTTP.ResponseBody

    'Change stream type To binary
    .Position = 0
    .Type = adTypeText

    'Specify charset For the source text (unicode) data.
    .Charset = "iso-8859-1"

    'Open the stream And get binary data from the object
    strResponse = .ReadText
End With

如果你有 Fiddler,试着查看 响应 头部并看看里面有什么。Fiddler 还会显示响应,因此请比较它与 xmlhttp 的值。 - Tim Williams
@variant: 你能否帮我看一下我的代码,看看能否帮我解决问题?链接 - Trenera
1个回答

4

问题可能是您实际上没有发送数据以 utf-8 编码。它可能是 Ansi 或者您使用的任何字符串/文件编码。那么它将无法使用 ASCII 代码中高于 127 的字符。您确定原始文本流是 utf-8 吗?是否尝试过其他编码,如 iso-* 格式之一?


谢谢,Ben。我还尝试了objHTTP.setRequestHeader "Content-Type","content=text/html; charset=iso-8859-1",与页面头部相匹配,但没有成功。 - variant
你是在VBA或其他系统中看到这个字符转换的吗? - Ben.Vineyard
当我检查responseText的值时,我发现在VBA中这些特殊字符被转换为无意义的垃圾。 - variant
你可以尝试将文本视为二进制流:objHTTP.Send With CreateObject("ADODB.Stream"). - Ben.Vineyard
Ben - 你能更新你的答案并加入ADODB.Stream的解决方案吗?这对我很有帮助。谢谢! - variant
太好了!我很高兴你能解决它。我应该将你的完整解决方案合并到我的答案中,还是保持原样?我认为保持原样就可以了。 - Ben.Vineyard

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接