MSXML2.ServerXMLHTTP и национальные символы
Этот вопрос связан с этим: кодировка символов Microsoft.XmlHttp в Vbscript, но отличается только тем, что национальные символы находятся в имени домена, а не только в аргументах.
Задача: скачать страницу с данного URL.
Я уже решил проблему передачи строки UTF8 в VBScript, прочитав ее из файла в кодировке UTF8 через ADO.
Но теперь, когда я пытаюсь открыть его, 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 в файл UWF8 в кодировке UTF8, скрипт выдаст ошибку при нормальной работе с hxxp: //google.com.
Обходной путь должен использовать ascii представление доменного имени - но я еще не нашел кодировщик PunnyCode для vbscript (кроме Chillkat, который является излишним для моей задачи).
Буду признателен за помощь в решении основной проблемы или обходного пути.
1 ответ
Я совершил удивительное путешествие вглубь своего жесткого диска и нашел код, написанный / для Jesper Høy. Это был исходный код средства преобразования IDN SimpleDNS Plus.
Снимок страницы Archive.org: http://web.archive.org/web/20060423164021/http://www.simpledns.com/idn-convert.asp
Снимок файла Archive.org: idn-convert-asp.zip
Вы также можете скопировать весь код из этой сущности.
Создайте функцию для преобразования URL-адресов.
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
Затем преобразуйте ваш URL, прежде чем сделать запрос.
XMLHttpReq.Open "GET", DummyPuny(url), False