[VBA] 한글 문자열을 UTF-8 로 변환 (VBA convert string to UTF-8)

[VBA] 한글 문자열을 UTF-8 로 변환 (VBA convert string to UTF-8)

UTF8 이라는 함수를 정의해서 사용하면 된다.


■ 함수 정의

Private Declare PtrSafe Function WideCharToMultiByte Lib “kernel32” ( _
    ByVal CodePage As Long, _
    ByVal dwFlags As Long, _
    ByVal lpWideCharStr As LongPtr, _
    ByVal cchWideChar As Long, _
    ByVal lpMultiByteStr As LongPtr, _
    ByVal cchMultiByte As Long, _
    ByVal lpDefaultChar As Long, _
    ByVal lpUsedDefaultChar As Long _
As Long

Private Const CP_UTF8 As Long = 65001

‘ 한글 -> UTF-8 인코딩 처리
Public Function UTF8(ByRef T) As String
On Error GoTo ErrLbl
    Dim str As String
    str = T
    ‘ str = Replace$(str, “<“, “<“)
    ‘ str = Replace$(str, “>”, “>”)
    Dim BufSize As Long, MultiArr() As Byte, Buf As String, i As Long
    Dim UniArr() As Byte
    
    UniArr = str
    BufSize = WideCharToMultiByte(CP_UTF8, 0&, VarPtr(UniArr(0)), (UBound(UniArr) + 1) / 2, 0&, 0&, 0&, 0&)
    
    If BufSize > 0 Then
        ReDim MultiArr(BufSize – 1&)
        WideCharToMultiByte CP_UTF8, 0&, VarPtr(UniArr(0)), (UBound(UniArr) + 1) / 2, VarPtr(MultiArr(0)), BufSize, 0&, 0&
    End If
    
    For i = 0 To UBound(MultiArr)
        If MultiArr(i) = 63 Then
            Buf = Buf & Chr(MultiArr(i)) ‘// ?
        Else
            Select Case Chr(MultiArr(i))
                Case Space(1): Buf = Buf & “+”
                Case vbNewLine, vbCrLf, vbLf, vbCr: Buf = Buf & “%0A”
                Case “~”, “!”, “*”, “(“, “)”, “_”, “-“, “‘”, “.”
                Buf = Buf & Chr(MultiArr(i)) ‘// 특문
                Case 0 To 9
                Buf = Buf & Chr(MultiArr(i)) ‘// 숫자
                Case “A” To “Z”
                Buf = Buf & Chr(MultiArr(i)) ‘// 영대
                Case “a” To “z”
                Buf = Buf & Chr(MultiArr(i)) ‘// 영소
                Case Else
                Buf = Buf & “%” & IIf(Len(Hex$(MultiArr(i))) Mod 2, 0, “”) & Hex$(MultiArr(i))
            End Select
        End If
    Next i
UTF8 = Buf
ErrLbl:
End Function

 사용 예

Sub 매크로1()

‘ 매크로1 매크로
‘ 바로 가기 키: Ctrl+k

    Dim a
    Dim b
    
    a = “한글”
    b = UTF8(“한글”)
    
    MsgBox (a)
    MsgBox (b)
End Sub

 결과

결과는 문자열 “한글”이 “%ED%95%9C%EA%B8%80” 으로 변환되어 표시된다.


 

참고사이트 : https://blog.naver.com/program114/220426949984