IT정보공유

VB6 UTF-8 한글 문자열 변환 및 URLEncoding 정리

알지오™ 2019. 4. 10.

하..VB6에서 UTF-8 한글 변환 및 URLEncoding을 하려니 참 어렵습니다.
생각보다 쉽게 되질 않네요.
C# 이나 Java라면 아주 쉽게 변환이 가능한 클래스가 제공되는데
VB6은 직접 만들어서 쓰거나 Windows API 함수를 써야해서 어렵습니다.

일단 개념적으로 VB6은 유니코드를 사용하는 언어이고 UTF-8 변환을 위해서는 
MultiByteToWideChar, WideCharToMultiByte라는 API를 사용해야 합니다.

 

'//
'//
Public Declare Function MultiByteToWideChar Lib "kernel32" (ByVal CodePage As Long, ByVal dwFlags As Long, ByVal lpMultiByteStr As Long, ByVal cbMultiByte As Long, ByVal lpWideCharStr As Long, ByVal cchWideChar As Long) As Long
Public Declare Function WideCharToMultiByte Lib "kernel32" (ByVal CodePage As Long, ByVal dwFlags As Long, ByVal lpWideCharStr As Long, ByVal cchWideChar As Long, ByVal lpMultiByteStr As Long, ByVal cchMultiByte As Long, ByVal lpDefaultChar As Long, ByVal lpUsedDefaultChar As Long) As Long


Public Function ConvertToUTF8(ByVal sText As String) As Byte()
    Dim OutLen As Long
    Dim utf8bytes() As Byte
    
    OutLen = WideCharToMultiByte(65001, 0, StrPtr(sText), Len(sText), 0, 0, 0, 0)
    ReDim utf8bytes(OutLen - 1)
    WideCharToMultiByte 65001, 0, StrPtr(sText), LenH(sText), VarPtr(utf8bytes(0)), OutLen, 0, 0
	
    ConvertToUTF8 = utf8bytes
End Function


Public Function LenH(sText As String) As Integer
    LenH = LenB(StrConv(sText, vbFromUnicode))
End Function
'//
'//

 

LenH()함수는 VB6에서는 한글자의 길이가 1로 잡히기 때문에 바이트변환후 길이를 계산하기 위해 만들어진 함수입니다.
위 함수로 VB6에서도 UTF-8로 문자열 변환을 할 수있습니다.

그럼 VB6에서의 URLEncoding은 어떻게 처리를 할까요?
저도 이번에 처음 안 사실인데URLEncoding은 16진수 표기라는 겂니다.

그리고 이 바이트배열로 변환된 값을 이용하여 각 바이트별로 16진수앞에 % 문자를 붙여주게 되면 URLEncoding이 되는겁니다.

언어별로 URLEncode 하는 방식이 다를수 있는데 아래함수는 자바스크립트, C# 등이랑 맞췄습니다.
한글만 인코딩되며 알파벳과 숫자는 인코딩이 되지 않는 함수입니다.

 

'//
'//
Public Function ConvertToUTF8_URLEncode(ByVal sText As String) As String
    Dim lngOutLen As Long
    Dim i, j As Integer
    Dim retResult As String
    Dim TempStr   As String
    Dim TempArr() As Byte
    
    For i = 0 To Len(sText) - 1        
        TempStr = Mid(sText, i + 1, 1)
        If HLen(TempStr) >= 2 Then            
            TempArr = ConvertToUTF8(TempStr)            
            For j = 0 To UBound(TempArr)
                retResult = retResult & "%" & Hex(TempArr(j))
            Next j                                            
        Else
        	retResult = retResult & TempStr
        End If  
    Next i
    
    ConvertToUTF8_URLEncode = retResult
End Function

'//
'//

 

도움이 되셨길 바랍니다.

 

댓글

💲 추천 글