Computer/ASP

asp 용 UTF8 컨버터

알찬돌삐 2012. 8. 10. 16:26

 <%

'****************************************************************************************
'*
'*  URLTools.asp 는 공개 Include File 입니다. 상업적, 비상업적인 목적으로 어디서나
'*  자유롭게 사용하실 수 있습니다.
'*
'*  다만, 기능 추가나 에러 수정을 목적으로 Code 를 수정하셨을 때는, 제게 수정된 내용과
'*  목적에 대하여 적은 메일을 보내주셔서 제가 수정사항을 반영할 수 있도록 해주시면 감사하
'*  겠습니다. 또한, 이런식으로 수정된 Code 는 그 내용과 이유를 정리하여 제 홈페이지의
'*  내용에 추가하도록 하겠습니다. 연락처는 다음과 같습니다.
'*
'*  Homepage URL : http://www.egocube.pe.kr/
'*  E-Mail       : songgun@egocube.pe.kr
'*
'****************************************************************************************


'****************************************************************************************
'*
'*  형 식 : Function
'*  정 의 : Public Function URLEncode(URLStr)
'*  설 명 : URLStr 인자로 입력받은 문자열을 URLEncoding 한다.
'*  작 성 : 송원석
'*  날 짜 : 2001.12.03
'*
'****************************************************************************************
Public Function URLEncode(URLStr)

    Dim sURL                '** 입력받은 URL 문자열
    Dim sBuffer             '** Encoding 중의 URL 을 담을 Buffer 문자열
    Dim sTemp               '** 임시 문자열
    Dim cChar               '** URL 문자열 중의 현재 Index 의 문자

    Dim Index

    On Error Resume Next

    Err.Clear
    sURL = Trim(URLStr)     '** URL 문자열을 얻는다.
    sBuffer = ""            '** 임시 Buffer 용 문자열 변수 초기화.


    '******************************************************
    '* URL Encoding 작업
    '******************************************************

    For Index = 1 To Len(sURL)
        '** 현재 Index 의 문자를 얻는다.
        cChar = Mid(sURL, Index, 1)

        If cChar = "0" Or _
           (cChar >= "1" And cChar <= "9") Or _
           (cChar >= "a" And cChar <= "z") Or _
           (cChar >= "A" And cChar <= "Z") Or _
           cChar = "-" Or _
           cChar = "_" Or _
           cChar = "." Or _
           cChar = "*" Then

            '** URL 에 허용되는 문자들 :: Buffer 문자열에 추가한다.
            sBuffer = sBuffer & cChar

        ElseIf cChar = " " Then
            '** 공백 문자 :: + 로 대체하여 Buffer 문자열에 추가한다.
            sBuffer = sBuffer & "+"
        Else
            '** URL 에 허용되지 않는 문자들 :: % 로 Encoding 해서 Buffer 문자열에 추가
            sTemp = CStr(Hex(Asc(cChar)))

            If Len(sTemp) = 4 Then
                sBuffer = sBuffer & "%" & Left(sTemp, 2) & "%" & Mid(sTemp, 3, 2)
            ElseIf Len(sTemp) = 2 Then
                sBuffer = sBuffer & "%" & sTemp
            End If
        End If
    Next


    '** Error 처리
    If Err.Number > 0 Then
        URLEncode = ""
        Exit Function
    End If

    '** 결과를 리턴한다.
    URLEncode = sBuffer
    Exit Function

End Function


'****************************************************************************************
'*
'*  형 식 : Function
'*  정 의 : Public Function URLDecode(URLStr)
'*  설 명 : URLStr 인자로 입력받은 문자열을 URLDecoding 한다.
'*  작 성 : 송원석
'*  날 짜 : 2001.12.03
'*
'****************************************************************************************
Public Function URLDecode(URLStr)

    Dim sURL                '** 입력받은 URL 문자열
    Dim sBuffer             '** Decoding 중의 URL 을 담을 Buffer 문자열
    Dim cChar               '** URL 문자열 중의 현재 Index 의 문자

    Dim Index
    Dim s,bUnicode

    On Error Resume Next

    Err.Clear
    sURL = Trim(URLStr)     '** URL 문자열을 얻는다.
    sBuffer = ""            '** 임시 Buffer 용 문자열 변수 초기화.

    '******************************************************
    '* URL Decoding 작업
    '******************************************************
    '한글이 입력되는 경우가 2가지 있음
    '    "%C0%DA" ->일반
    '    "%uC911" ->유니코드 chr 대신 chrW 사용

    Index = 1
   
    '?,%가 없다면 검색할 필요없음
    if instr(1,pURL,"?",1) > 0 OR instr(1,pURL,"%",1) > 0 then
        Do While Index <= Len(sURL)
            cChar = Mid(sURL, Index, 1)
            If cChar = "+" Then       
                '** '+' 문자 :: ' ' 로 대체하여 Buffer 문자열에 추가한다.
                sBuffer = sBuffer & " "
                Index = Index + 1           
            ElseIf cChar = "%" Then       
                '** '%' 문자 :: Decoding 하여 Buffer 문자열에 추가한다.
               
                '유니코드인지 판단한 후에 일반문자인지 한글인지 구분함
                bUnicode = false
               
                s = Mid(sURL, Index + 1, 5)
                bUnicode = boolUnicode(s)
               
                if bUnicode = true then
                    cChar = Mid(sURL, Index + 2, 2)
                else
                    cChar = Mid(sURL, Index + 1, 2)
                end if
   
                If CInt("&H" & cChar) < &H80 Then
                    '** 일반 ASCII 문자
                    sBuffer = sBuffer & Chr(CInt("&H" & cChar))
                    Index = Index + 3
                Else
                    '** 2 Byte 한글 문자
                    cChar = Replace(Mid(sURL, Index + 1, 5), "%", "")
                   
                    '유니코드인경우 맨앞의 u자를 제거해야 함
                    if bUnicode = true then        'C0DA
                        cChar = mid(cChar,2,4)
                        sBuffer = sBuffer & ChrW(CInt("&H" & cChar))
                    else                        'uC911
                        sBuffer = sBuffer & Chr(CInt("&H" & cChar))
                    end if
                    Index = Index + 6
                End If
            Else
                '** 그 외의 일반 문자들 :: Buffer 문자열에 추가한다.
                sBuffer = sBuffer & cChar
                Index = Index + 1
            End If
        Loop
    else
        sBuffer = ""
    end if
   
    '** Error 처리
    If Err.Number > 0 Then
        URLDecode = ""
        Exit Function
    End If

    '** 결과를 리턴한다.
    URLDecode = sBuffer
    Exit Function

End Function

'****************************************************************************************
'*  형 식 : Function
'*  정 의 : Public Function boolUnicode(s)
'*  설 명 : s 인자로 입력받은 문자열을 기준으로 유니코드인지 판단한다.
'*  작 성 : kimyh
'*  날 짜 : 2007.01.25
'****************************************************************************************
Function boolUnicode(s)
    'true = 유니코드(%uC911)     false=일반(%C0%DA) 형식으로 문자열이 잘리므로
    '첫번째 %를 제거하여 %가 발견되지 않으면 유니코드로 판단
   
    tmp = false
    if instr(1,s,"%",1) <= 0 then tmp = true
    boolUnicode = tmp
   
End Function


'---------------------------------------------------------------------
'    URLEncodeUTF8 (아스키 -> UTF8)
'    Devpia.com 고일호(n4kjy)님 - 2002-07-24
'---------------------------------------------------------------------
Public Function URLEncodeUTF8(byVal szSource)

    Dim szChar, WideChar, nLength, i, result
    nLength = Len(szSource)

    szSource = Replace(szSource," ","+")

    For i = 1 To nLength
        szChar = Mid(szSource, i, 1)

        If Asc(szChar) < 0 Then            
            WideChar = CLng(AscB(MidB(szChar, 2, 1))) * 256 + AscB(MidB(szChar, 1, 1))

            If (WideChar And &HFF80) = 0 Then
                result = result & "%" & Hex(WideChar)
            ElseIf (WideChar And &HF000) = 0 Then
                result = result & _
                "%" & Hex(CInt((WideChar And &HFFC0) / 64) Or &HC0) & _
                "%" & Hex(WideChar And &H3F Or &H80)
            Else
                result = result & _
                "%" & Hex(CInt((WideChar And &HF000) / 4096) Or &HE0) & _
                "%" & Hex(CInt((WideChar And &HFFC0) / 64) And &H3F Or &H80) & _
                "%" & Hex(WideChar And &H3F Or &H80)
            End If
        Else
            result = result + szChar
        End If
    Next
    URLEncodeUTF8 = result
End Function


'---------------------------------------------------------------------
'    URLDecodeUTF8 (UTF8 --> 아스키 )
'    mongmong - 2003. 10 (URLEncodeUTF8 참조)
'---------------------------------------------------------------------
Public Function URLDecodeUTF8(byVal pURL)
    Dim i, s1, s2, s3, u1, u2, result
    pURL = Replace(pURL,"+"," ")
   
    '?,%가 없다면 검색할 필요없음
    if instr(1,pURL,"?",1) > 0 OR instr(1,pURL,"%",1) > 0 then
            For i = 1 to Len(pURL)
                if Mid(pURL, i, 1) = "%" then
                    s1 = CLng("&H" & Mid(pURL, i + 1, 2))
       
                    '2바이트일 경우
                    if ((s1 AND &HC0) = &HC0) AND ((s1 AND &HE0) <> &HE0) then
                        s2 = CLng("&H" & Mid(pURL, i + 4, 2))
       
                        u1 = (s1 AND &H1C) / &H04
                        u2 = ((s1 AND &H03) * &H04 + ((s2 AND &H30) / &H10)) * &H10
                        u2 = u2 + (s2 AND &H0F)
                        result = result & ChrW((u1 * &H100) + u2)
                        i = i + 5
       
                    '3바이트일 경우
                    elseif (s1 AND &HE0 = &HE0) then
                        s2 = CLng("&H" & Mid(pURL, i + 4, 2))
                        s3 = CLng("&H" & Mid(pURL, i + 7, 2))
       
                        u1 = ((s1 AND &H0F) * &H10)
                        u1 = u1 + ((s2 AND &H3C) / &H04)
                        u2 = ((s2 AND &H03) * &H04 +  (s3 AND &H30) / &H10) * &H10
                        u2 = u2 + (s3 AND &H0F)
                        result = result & ChrW((u1 * &H100) + u2)
                        i = i + 8
                    end if
                else
                    result = result & Mid(pURL, i, 1)
                end if
            Next
    else
        result = ""
    end if
    URLDecodeUTF8 = result
End Function
%>

이 글은 스프링노트에서 작성되었습니다.

.

'Computer > ASP' 카테고리의 다른 글

zip,unzip 컴포넌트  (0) 2012.08.10
xmlhttp 를 통한 데이터 교환  (0) 2012.08.10
효율적인 페이징 기법  (0) 2011.11.29
ASP 에서 UTF-8 처리  (0) 2011.11.29
성능 및 스타일 향상을 위한 25 ASP 팁  (0) 2011.11.29