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

Posted

技术标签:

【中文标题】XMLHTTP 和特殊字符(例如,重音符号)【英文标题】:XMLHTTP and Special Characters (eg, accents) 【发布时间】:2011-10-29 08:06:16 【问题描述】:

我通过 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,请尝试查看 response 标头并查看其中的内容。 Fiddler 还会向您显示响应,因此请查看它与 xmlhttp 中的值的比较。 @variant:你能看看我的代码,看看你能不能帮我解决这个问题?link 【参考方案1】:

问题可能是您实际上并未发送编码为 utf-8 的数据。它可能是 Ansi 或您使用的任何字符串/文件编码。然后它将无法在 ASCII 码中使用高于 127 的字符。你确定原始文本流是utf-8吗?您是否尝试过其他编码,例如其中一种 iso-* 格式?

【讨论】:

谢谢,本。我也试过 objHTTP.setRequestHeader "Content-Type", "content=text/html; charset=iso-8859-1",匹配页面的header,没有成功。 您是否在 VBA 或您可能发送到的其他系统中看到这种字符翻译? 当我检查 responseText 的值时,我看到这些特殊字符在 VBA 中被转换为无意义的垃圾 您可以尝试将文本视为二进制流:objHTTP.Send With CreateObject("ADODB.Stream")。 Ben - 你能用 ADODB.Stream 答案更新你的答案吗 - 为我解决了这个问题。谢谢!!

以上是关于XMLHTTP 和特殊字符(例如,重音符号)的主要内容,如果未能解决你的问题,请参考以下文章

删除重音和特殊字符[重复]

万用字元与特殊符号及正则表示字符

在占位符 JSX 中渲染特殊字符

从命令提示符打印目录到文本文件时缺少特殊字符

如何将重音字符与 PHP preg 匹配?

编码特殊字符以传入url并由javascript读取[重复]