【发布时间】:2017-01-01 22:29:33
【问题描述】:
这个问题与这个问题有关:Character encoding Microsoft.XmlHttp in Vbscript,但有一点不同,国家字符在域名中,而不仅仅是参数。
任务是:从给定的 URL 下载一个页面。
我已经解决了通过 ADO 从 UTF8 编码文件中读取 UTF8 字符串到 VBScript 的问题。
但是现在当我尝试打开它时,MSXML2.ServerXMLHTTP 返回错误:URL 无效。
这是 VBScript 代码:
Set objStream = CreateObject("ADODB.Stream")
objStream.CharSet = "utf-8"
objStream.Open
objStream.LoadFromFile("fileWithURL.txt")
url = objStream.ReadText()
objStream.Close
Set XMLHttpReq = CreateObject("MSXML2.ServerXMLHTTP")
XMLHttpReq.Open "GET", url, False
XMLHttpReq.send
WEBPAGE = XMLHttpReq.responseText
如果您将 hxxp://россия.рф/main/page5.html 之类的内容放入 UTF8 编码的文件WithURL.txt 中,脚本将在使用 hxxp 时引发错误: //google.com.
解决方法是使用域名的 ascii 表示 - 但我还没有找到用于 vbscript 的 PunnyCode 编码器(除了Chillkat,这对我的任务来说是多余的)。
感谢您对主要问题或解决方法的帮助。
【问题讨论】:
-
没有任何内置功能可以做到这一点,您必须自己尝试构建解码/编码算法(请记住 VBScript 不能很好地处理字节级的东西) i> 或者接受打击并使用类似ChillkatSoft 或Motobit ByteArray COM 组件来为您完成繁重的工作。
-
感谢您的快速响应!所以它真的不起作用,因为它不应该 - 它是否正确?换句话说,MSXML2.ServerXMLHTTP 不支持域名中的国家字符,是吗?您会建议两种编码器中的哪一种?
-
好吧,
IServerXMLHttpRequest最初是作为 MSXML 3.0 的一部分发布的,所以我们谈论的是 15 年前左右,它从未被设计用于处理 IRI 唯一的 URI,更不用说 IRI wasn't defined until 2005。 -
任何一个 COM 组件都应该达到目的,因为我没有使用过任何一个我都不想评论。
-
@Lankymart 而不是 MSXML 的年龄,它必须与 MSXML 所依赖的 Windows API 相关。例如,在 Windows 10 上,我对 IRI 没有任何问题。你知道,构建很重要。记住this similar behaviour。
标签: utf-8 vbscript serverxmlhttp punycode