Кодировка символов Microsoft.XmlHttp в Vbscript - PullRequest
3 голосов
/ 04 июня 2011

Я пишу 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 Ответ

2 голосов
/ 05 июня 2011

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

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

   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 ""

EDIT:

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

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...