검색결과 리스트
MSXML2.ServerXMLHTTP에 해당되는 글 1건
글
MSXML2.XMLHttp.6.0 or MSXML2.ServerXMLHTTP를 이용해 사이트 소스를 얻을 때 한글 깨짐 방지
설정
트랙백
댓글
몇 개 사이트의 소스를 얻어서 파싱할 일이 생겨 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¶m2=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
'WEB' 카테고리의 다른 글
google chart 및 실시간으로 chart변경 (0) | 2012.09.12 |
---|---|
스마트폰용 모바일페이지를 위한 설정 (0) | 2012.09.10 |
웹브라우저의 역사 (0) | 2012.08.16 |
Eclipse에서 기존 프로젝트를 다른 프로젝트에 링크 (0) | 2012.08.06 |
Eclipse에서 기존소스를 프로젝트로 추가 (0) | 2012.08.06 |
RECENT COMMENT