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