2013-03-03 4 views
2

내가 더 proccessing 얻을 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 

그것은 대부분의 페이지에 대한 작동하지만, 일부 페이지의 responseTextNo Mapping for the Unicode character exists in the target multi-byte code page입니다.

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

responseTextNo 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

이며 여기 (구글 크롬에서 스크린) 의심 인코딩 될 수없는 문자가되는 웹 페이지의 일례이다

때때로 동일한 웹 사이트에 있지만 다른 검색 결과에 대해이 함수는 오류를 생성하지 않지만 imidi의 HTML 소스 창문은 마치 ?????? ...

아이디어를 얻는 방법은 무엇입니까?

답변

1

은을 StrConv를 사용해보십시오 :

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

vbUnicode가 : 시스템의 기본 코드 페이지를 사용하여 유니 코드로 문자열을 변환합니다. (Macintosh에서 사용할 수 없습니다.) 나를 위해 일한

+0

안녕 다니엘위한 responseBody의 사용. 나는 당신의 제안을 확인하고 문제 해결에 대한 진전을 제공한다. – user2127981

+0

스크린 샷의 캐릭터가있는 웹 페이지의 경우 디버거가 "responseText = oHTTP.responseText"코드와 함께 표시하고 oHTTP.responseText에 "매핑하지 않음 ..."이 포함되어 있습니다. – user2127981

+0

그리고 시도해 보셨습니까? responseText = StrConv (oHTTP.responseText, vbUnicode)? – dee

1

솔루션 :

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

주 대신으로 responseText