Кодировка символов Microsoft.XmlHttp в Vbscript

Я пишу VBScript, чтобы извлечь некоторые данные с веб-страницы, вырезать несколько ключевых частей информации и записать их в файл.

На данный момент мой скрипт для доступа к страницам и сохранения содержимого файла в строку выглядит так:

Set WshShell = WScript.CreateObject("WScript.Shell")
Set http = CreateObject("Microsoft.XmlHttp")

'Load Webpage where address is URL
http.open "GET", URL, FALSE
http.send ""
'Assign webpage contents as a string to variable called Webpage
WEBPAGE = http.responseText

Мне нужно сохранить содержимое в строку, чтобы я мог использовать регулярное выражение для него, чтобы извлечь содержимое, которое мне нужно.

Этот скрипт отлично работает, за исключением случаев, когда страницы содержат нестандартные символы (например, é). Когда страница содержит что-то вроде этого, скрипт выдает ошибку и останавливается.

Я предполагаю, что это как-то связано с кодировкой, но я не могу понять, как это исправить. Может кто-то указать мне верное направление? Спасибо, парни

редактировать

Благодаря помощи здесь я понял, что задал не тот вопрос! Оказывается, я загружал контент нормально - проблема заключалась в том, что после этого я пытался отредактировать его и записать в файл, и файл был в неправильном формате. У меня было это:

Set objTextFile = objFSO.OpenTextFile(OutputFile, 8, True,)

Меняя это на это:

Set objTextFile = objFSO.OpenTextFile(OutputFile, 8, True, -1)

Кажется, это исправили. Что за сумасшедший мир, а? Спасибо за помощь.

1 ответ

Решение

Возможно, вам придется установить правильные блоки заголовка перед отправкой

Например, ниже приведен только пример. Вам нужно будет узнать, что это именно для вашего сайта

   http.open "GET", URL, FALSE
    http.SetRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"
    http.SetRequestHeader "Accept", "text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5"
    http.SetRequestHeader "Accept-Language", "en-us,en;q=0.5"
    http.SetRequestHeader "Accept-Charset", "ISO-8859-1,utf-8;q=0.7,*;q=0.7"
    http.send ""

РЕДАКТИРОВАТЬ:

А как насчет этого? Здесь работает нормально

Dim XMLHttpReq,URL,WEBPAGE
Const Eacute  = "%C3%89"

Set XMLHttpReq = CreateObject("MSXML2.ServerXMLHTTP")

URL = "http://en.wikipedia.org/wiki/%C3%89"
'Load Webpage where address is URL
XMLHttpReq.Open "GET", URL, False
XMLHttpReq.send ""
'Assign webpage contents as a string to variable called Webpage
WEBPAGE = XMLHttpReq.responseText
WEBPAGE = Replace(WEBPAGE, Eacute, "É")
'Debug.Print WEBPAGE

В этом случае буква E остаётся в виде строки%C3%89, и вы можете принудительно ввести любой символ, который вы выберете, если потребуется.

EDIT2:

Просто добавим, что если вы делаете это с VBScript, вы можете найти этот метод полезным

Dim XMLHttpReq, URL, WEBPAGE, fso, f
Const Eacute = "%C3%89"
Set XMLHttpReq = CreateObject("MSXML2.ServerXMLHTTP")
URL = "http://en.wikipedia.org/wiki/%C3%89"
XMLHttpReq.Open "GET", URL, False
XMLHttpReq.send ""
WEBPAGE = XMLHttpReq.responseText

Save2File WEBPAGE, "C:\Users\osknows\Desktop\test.txt"

Sub Save2File (sText, sFile)
    Dim oStream
    Set oStream = CreateObject("ADODB.Stream")
    With oStream
        .Open
        .CharSet = "utf-8"
        .WriteText sText
        .SaveToFile sFile, 2
    End With
    Set oStream = Nothing
End Sub
Другие вопросы по тегам