336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

몇 개 사이트의 소스를 얻어서 파싱할 일이 생겨 MSXML2.XMLHttp.6.0객체를 이용해 소스를 얻어왔다.
그런데 특정 하나의 사이트의 소스가 한글이 깨져서 나온다.
여기서는 ASP로 작업해달라고 하여 ASP소스로 한글이 깨지는 것을 방지하기 위해 아래와 같이 작업하였다.

Public Function BinDecode(byVal binData)
    Dim i, byteChr, strV

    For i = 1 to LenB(binData)
        byteChr = AscB(MidB(binData,i,2))

        If byteChr > 127 Then
            i = i + 1
            strV = strV & Chr("&H" & Hex(byteChr) & Hex(AscB(MidB(binData,i,2))))
        Else
            strV = strV & Chr(byteChr)
        End if
    Next

    BinDecode = strV
End Function

PostData = "param1=p1&param2=p2"

Set XMLHttp = Server.CreateObject("MSXML2.XMLHttp.6.0")
XMLHttp.open "POST", "
http://www.test.com/test.asp"
XMLHttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded;charset=UTF-8"
XMLHttp.setRequestHeader "Content-Length", Len(PostData)
XMLHttp.send PostData

If XMLHttp.status = 200 Then
        BodySrc = BinDecode(XMLHttp.responseBody)
End If

다른 방법으로는 아래의 참조사이트에서 정의된 개념으로 responseText 는 리모트의 응답을 무조건 유니코드로 간주하여 디코딩한다고 한다. 그래서 원본 사이트가 유니코드로 되어 있지 않은 경우 글자가 모두 깨지므로, 리모트의 응답을 디코딩하지 않는 형태로 받는 responseBody를 이용해야 하고, 적절한 인코딩을 하기 위해 ADO Stream을 이용한다.

과거에 Stream방식으로 한글깨짐을 처리했던 것 같은데 위와 같은 개념은 정립되지 않았었다. 역시 기초확립이 무엇보다 중요함을 다시 한번 느끼는 순간이다.
 

Set adoStream = CreateObject("ADODB.Stream")

adoStream.Open

adoStream.Position = 0

adoStream.Type = 1

adoStream.Write xmlhttp.responseBody

 

adoStream.Position = 0

adoStream.Type = 2

adoStream.Charset = "euc-kr"


resultStr = adoStream.ReadText

Response.Write resultStr

adoStream.Close

Set adoStream = Nothing

Set xmlhhtp = Nothing


참고 : http://hykim001.egloos.com/6492897

posted by 어린왕자악꿍