vba XMLHTTP 和特殊字符(例如,重音符号)
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/7100229/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
XMLHTTP and Special Characters (eg, accents)
提问by variant
I am using Microsoft.XMLHTTP via VBA to pull in the body of a web page. In doing so, characters such as é get replaced with "?" or something equally not useful.
我通过 VBA 使用 Microsoft.XMLHTTP 来拉入网页的正文。这样做时,诸如 é 之类的字符将被替换为“?” 或同样无用的东西。
Here's the basic code:
这是基本代码:
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
Is there any way to retrieve the page with the special characters intact?
有什么方法可以检索带有完整特殊字符的页面吗?
Note:
I have also tried using this request header with no success:objHTTP.setRequestHeader "Content-Type", "content=text/html; charset=iso-8859-1"
注意:我也尝试过使用这个请求头但没有成功:objHTTP.setRequestHeader "Content-Type", "content=text/html; charset=iso-8859-1"
Thanks in advance.
提前致谢。
Solution
Thanks to Ben.Vineyard (and some cursory Googling), I'm able to pull accented characters with the following code:
解决方案
感谢 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
采纳答案by Ben.Vineyard
The problem could be that you do not actually send the data encoded as utf-8. It might be in Ansi or whatever string/file encoding you use. And then it will not be able to use characters high than 127 in the ASCII code. Are you sure that the original text stream is utf-8? Have you tried other encoding like one of the iso-* formats?
问题可能是您实际上并未发送编码为 utf-8 的数据。它可能是 Ansi 或您使用的任何字符串/文件编码。然后它将无法在 ASCII 代码中使用高于 127 的字符。你确定原始文本流是utf-8吗?您是否尝试过其他编码,例如其中一种 iso-* 格式?