ASP에서 CodePage 고찰

ASP에서 CodePage 설정에 따라 문자열이 어떻게 처리가 되는지를 살펴보자.

<%@ CodePage=65001 Language="VBScript"%>

<%  
Option Explicit

Dim sFileName, sBuffer

sFileName = "utf8.txt"  
sBuffer = ReadFromTextFile(sFileName, "utf-8")  
ShowStringInfo sBuffer

'read utf-8  
Function ReadFromTextFile (sFile, sCharSet)  
    Dim oStream, str

    Set oStream = Server.CreateObject("adodb.stream")  
    oStream.Type = 2 'for text type  
    oStream.Mode = 3 'adModeWrite  
    oStream.Charset = sCharSet  
    oStream.Open  
    oStream.LoadFromFile server.MapPath(sFile)  
    str = oStream.ReadText  
    oStream.Close  
    Set oStream=nothing

    ReadFromTextFile=str  
End Function

Function ShowStringInfo(s)  
    Dim sHex

    sHex = GetHexString(s)  
    Response.Write s & ", Length=" & Len(s) & ", Hex=" & sHex  
End Function

Function GetHexString(s)  
    Dim i  
    Dim char  
    Dim result

    result = "0x"  
    For i = 1 To Len(s)  
        char = AscW(Mid(s, i, 1))  
        result = result & "[" & hex(char) & "]"  
    Next

    GetHexString = result  
End Function

%>    

위의 결과는

한글.txt, Length=6, Hex=0x\[D55C\]\[AE00\]\[2E\]\[74\]\[78\]\[74\]  

만약 CodePage를 949로 바꾸었다면

한글.txt, Length=6, Hex=0x\[D55C\]\[AE00\]\[2E\]\[74\]\[78\]\[74\]  

브라우져로 보면 “한글.txt”가 같아 보이지만 전자는 UTF-8 코드이고, 후자는 CP949이다.

ReadFromTextFile에서 리턴되는 문자열은 CodePage에 상관없이 유니코드페이지가 사용되고, Response.Write 하면서 CodePage에 따라서 문자열 변환이 이루어 진다.

Leave a Reply

Your email address will not be published. Required fields are marked *