brainage.egloos.com

포토로그



ASP에서 XML파서를 이용한 AJAX 한글처리방법 by 천하귀남

AJAX가 웹분야에서 쓰이기 시작한지 벌써 수년이 되가고 있습니다.
그런데... ASP쪽에서는 그리 많은 활용을 보이지 않습니다. 대부분의 예제는 PHP나 JSP쪽이 많습니다.

그이유중 하나가 ASP에서 인코딩 디코딩을 제대로 못하기 때문입니다.
특히나  XMLHttpRequest객체는 유니코드로 동작하는데 이걸 ASP의 기본코드인 ks_c_5601-1987로 변환을 못합니다.

이걸 해결하는 방법이 몇가지 있기는 하지만 이래저래 문제가 있습니다.

헌데 한가지 우회수단이 있습니다. ASP자체는 인코딩 디코딩이 불가능 하지만 ASP에서 쓸수있는 XML파서는 이것이 가능합니다.
이 방법은 XML로 리퀘스트를 보내 받는쪽에서 XML파서로 디코딩된 정보를 볼수있고
보낼때도 XML문서로 응답해 받는쪽은 자바스크립트의 XML파서로 디코딩해 볼수 있습니다.


기존에 구축된 사이트에 AJAX를 추가할경우 코드페이지 설정을 바꿀수 없는경우에 유용합니다.
신규 구축하실 경우는 유니코드로 구축하시는게 좋을 겁니다.

간략한 예제 형태로 작성하다보니 동기방식으로 작성했습니다.
요는 어떻게 내용을 보내서 어떻게 받아오는가만 참고하시면 됩니다.

 


//XMLHttpRequest 객체생성
var oXmlHTTP = getXmlHttp();

if (window.XMLHttpRequest)
{
 oXmlHttp = new XMLHttpRequest();
}else{
 oXmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}

oXmlHTTP.open("POST", "AJAX.asp", false); // 동기방식으로 연결


//리퀘스트 내용을 XML문자열로 만든다. ASP는 기본적으로 EUC-KR로 처리하기 때문에 따로 정의할필요는 없습니다.
//한글을 전송할때는 태그내용을 <![CDATA[ ]]>로 선언해야 합니다.
var strXML = "";
strXML = strXML + "<xmldata>";
strXML = strXML + "<strList><![CDATA[내용]]></strList>";
strXML = strXML + "</xmldata>";

//리퀘스트 전송
oXmlHTTP.send(strXML);

//받아온 XML문자열에서 에서 strList태그의 내용을 추출 viewText객체의 innerHTML 로 넣는다.
eId("viewText").innerHTML = oResXML.getElementsByTagName("strList").item(0).firstChild.nodeValue;

 

--------------------------------------------------------------------------------------------------------------
'''''AJAX.asp파일쪽의 처리


'''''받아온 XML문자열을 Request.BinaryRead로 읽어서
'''''microsoft.xmldom 파서로 읽어 Scripting.Dictionary객체로 반환
'''''필요한 리퀘스트 내용은 딕셔너리에서 호출한다.

Dim vntPostedData, lngCount
lngCount = Request.TotalBytes
vntPostedData = Request.BinaryRead(lngCount)

Dim oXMLDom                       
Set oXMLDom = Server.CreateObject("microsoft.xmldom")

oXMLDom.load(vntPostedData)

Dim oDicXMLRequest
set oDicXMLRequest = Server.CreateObject("Scripting.Dictionary")

If oXMLDom.parseError = 0 Then

        Dim objNode
        Set objNode = oXMLDom.documentElement
        set oXMLDom = nothing

        Dim i
        For i = 0 To objNode.childNodes.length - 1
                oDicXMLRequest.Add objNode.childNodes.Item(i).nodeName, objNode.childNodes.Item(i).Text
        Next

        set objNode = nothing
else
        set oXMLDom = nothing       
End if

 

Response.ContentType = "text/xml"
Response.Charset = "ks_c_5601-1987"


''''''''''''''''XML문서의 형태로 돌려보낸다. encoding을 ASP의 기본엔코딩인 ks_c_5601-1987로 지정한다.
Response.write "<?xml version=""1.0"" encoding=""ks_c_5601-1987""?>" & chr(13) & chr(10)


''''''''''''''''oDicXMLRequest에서 strList의 내용을 불러낸다.
Response.write "<gwinaemi><strList><![CDATA[" & oDicXMLRequest("strList") & "]]></strList></gwinaemi>"

 


덧글

  • ERIS 2007/12/18 09:45 # 삭제 답글

    ASP관련해서 AJAX자료를 찾는중에 천하귀남님의 글을 보게됐습니다.
    아주 유용한 자료이네요 ^^
    제가 퍼가도 될련지요?!
    제 블로그에 올리는 것은 아니고
    개인적으로 문서로 스크랩하고 싶어서 입니다.

  • 천하귀남 2007/12/18 09:55 # 답글

    예 ^^ 도움이 되셨다니 다행입니다. 비공개 보관이라면 얼마든지 허용입니다.
댓글 입력 영역
* 비로그인 덧글의 IP 전체보기를 설정한 이글루입니다.

구글 애널리틱스

통계 위젯 (화이트)

114882
6091
5700164

이 이글루를 링크한 사람 (화이트)

408

당부드리는 말

블로그 사진을 포함한 전체가 아닌 일부의 내용은 얼마든지 사용하셔도 상관없습니다.

상대방을 존중하는 생각이 있다면 욕설과 과도한 비아냥은 자제를 부탁드립니다. 정도가 심하거나 비로그인의 글은 임의 삭제 가능함을 알려드립니다.

A타입 클린 캠페인 위젯

방문자

Map