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에 따라서 문자열 변환이 이루어 진다.

Related posts:

  1. VBScript: URLEncode, URLDecode 함수 ASP에 URL을 인코딩하려면 Server 객체의 URLEncode 메쏘드를 사용하면 된다. 그럼...
  2. ASP: XSS방지를 위한 htmlspecialchars 함수 XSS방지를 위해 PHP에서는 htmlspecialchars함수를 사용하면 된다. ASP에서는 기본적으로 이런 기능의...
  3. [MS Sql] 여러 레코드를 하나의 문자열로 합치기 특정쿼리의 결과 레코드를 하나의 문자열, 특히 CSV(Comma Separaed Value) 형태로...
  4. Response.CodePage Classic ASP에서 UTF-8을 사용하기 위해서 Response.CodePage = 65001 을 했더니...
  5. VBScript의 GetRef을 이용하여 간단한 이벤트 드리븐 프로그래밍하기 VBScript는 객체 지향적인 측면에서는 많이 부족한 언어다. 상속이나 다형성을 전혀...