这个问题与这个问题有关: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编码的fileWithURL.txt中,则脚本将在使用 hxxp正常工作时引发错误: //google.com
解决方法是使用域名的ascii表示 - 但我还没有找到针对vbscript的PunnyCode编码器(除了Chillkat,这对我的任务来说太过分了。)
非常感谢您对主要问题或解决方法的帮助。
答案 0 :(得分:2)
我已经在我的硬盘深度上做了一个惊人的旅程,发现了一个由/ Jesper Høy编写的代码。这是当时SimpleDNS Plus的IDN转换工具的源代码。
Archive.org页面快照:http://www.simpledns.com/idn-convert.asp
Archive.org文件快照:idn-convert-asp.zip
您也可以从this gist复制整个代码。
创建一个转换网址的功能。
Function DummyPuny(ByVal url)
Dim rSegments : rSegments = Split(url, "/")
If UBound(rSegments) > 1 Then
rSegments(2) = DomainPunyEncode(rSegments(2))
End If
DummyPuny = Join(rSegments, "/")
End Function
然后在提出请求之前转换您的网址。
XMLHttpReq.Open "GET", DummyPuny(url), False