2013-03-03 4 views
2

Вот источник функции я использую Получить HTML-код для дальнейшего обрабатывающ:VBA WinHttp нет отображения символов

Public Function DownloadTextFile(url As String) As String 
    Dim oHTTP As WinHttp.WinHttpRequest 

    Set oHTTP = New WinHttp.WinHttpRequest 
    oHTTP.Open Method:="GET", url:=url, async:=False 
    oHTTP.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)" 
    'oHTTP.setRequestHeader "Content-Type", "multipart/form-data; " 
    oHTTP.setRequestHeader "Content-Type", "text/html; charset=utf-8" 
    oHTTP.Option(WinHttpRequestOption_EnableRedirects) = True 
    oHTTP.send 

    Dim success As Boolean 
    success = oHTTP.waitForResponse() 
    If Not success Then 
     Debug.Print "DOWNLOAD FAILED!" 
     Exit Function 
    End If 

    Dim responseText As String 
    Debug.Print oHTTP.responseText 

    responseText = oHTTP.responseText 
    'Set fs = CreateObject("Scripting.FileSystemObject") 
    'Set a = fs.CreateTextFile("c:\testfile.txt", True, False) 
    'Set a = fs.CreateTextFile("c:\testfile.txt", True, True) 
    'a.WriteLine oHTTP.responseText 
    'a.Close 

    Set oHTTP = Nothing 

    DownloadTextFile = responseText 
End Function 

Это работает для большинства страниц, но для некоторых страниц responseText является No Mapping for the Unicode character exists in the target multi-byte code page.

Вот пример веб-страницы, для которых responseText является No Mapping for the Unicode character exists in the target multi-byte code page

http://bzp0.portal.uzp.gov.pl/index.php?ogloszenie=browser&action=search&rodzajzamowienia=B&rodzajogloszenia=1&aktualne=1&datapublikacji_rodzaj=5&iloscwynikownastronie=20&offset=20

и вот подозрительный характер, который не может быть закодированы (скриншот из Google Chrome):

http://imageshack.us/photo/my-images/585/errsource.png/

Время от времени на том же сайте, но для другого результата поиска эта функция не генерирует ошибку, но затем источник HTML в immidi ate window is ?????? ...

Любые идеи, как заставить его работать?

ответ

1

Попробуйте использовать StrConv:

DownloadTextFile = VBA.Strings.StrConv(responseText, vbUnicode) 

vbUnicode: Преобразует строку в Unicode, используя кодовую страницу по умолчанию системы. (Не доступен на компьютерах Macintosh.)

+0

Привет Даниэль. Я проверил ваше предложение, и это обеспечивает определенный прогресс в решении проблем. – user2127981

+0

Для пары веб-страниц с символом с экрана снимок, отладчик отмечает «responseText = oHTTP.responseText» часть кода с, а oHTTP.responseText содержит «No mapping character ...» – user2127981

+0

И вы попробовали: responseText = StrConv (oHTTP.responseText, vbUnicode)? – dee

1

Решение, которое работало для меня:

responseText = VBA.Strings.StrConv(oHTTP.ResponseBody, vbUnicode) 

Обратите внимание на использование ResponseBody вместо ResponseText