|
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
|