VBA에서 텍스트를 URLEncode/URLDecode 하는 것은 아래 함수를 이용할 수 있습니다.
Function ENCODEURL(varText As Variant, Optional blnEncode = True)
Static objHtmlfile As Object
If objHtmlfile Is Nothing Then
Set objHtmlfile = CreateObject("htmlfile")
With objHtmlfile.parentWindow
.execScript "function encode(s) {return encodeURIComponent(s)}", "jscript"
End With
End If
If blnEncode Then
ENCODEURL = objHtmlfile.parentWindow.encode(varText)
End If
End Function
Function DECODEURL(varText As Variant, Optional blnEncode = True)
Static objHtmlfile As Object
If objHtmlfile Is Nothing Then
Set objHtmlfile = CreateObject("htmlfile")
With objHtmlfile.parentWindow
.execScript "function decode(s) {return decodeURIComponent(s)}", "jscript"
End With
End If
If blnEncode Then
DECODEURL = objHtmlfile.parentWindow.decode(varText)
End If
End Function
하지만 VBA에서 utf-8로 인코딩된 한글 텍스트에 대해서는 위 함수가 잘 작동하지만
Euc-kr 인 텍스트에 대해서는 제대로 결과를 출력하지 못합니다.
VBA가 한글텍스트를 UTF-8로 만들어버리기도 하고
억지로 Binary로 읽어서 위 함수를 적용해도 자동화 오류를 뿜어내버립니다.
그래서 URLEncoding하는 사용자 함수를 만들어 써야 합니다.
'Powered by http://www.program1472.com/bbs/board.php?bo_table=TB_03&wr_id=93&wmode=1
Private Function URLEncode1472(ByVal StringVal As String, ByVal EncType As String, Optional SpaceAsPlus As Boolean = False) As String
Dim bytes() As Byte, b As Byte, i As Integer, space As String
If SpaceAsPlus Then space = "+" Else space = "%20"
If Len(StringVal) > 0 Then
With CreateObject("ADODB.Stream")
.Mode = 3 '// adModeReadWrite
.Type = 2 '// adTypeText
.CharSet = EncType '//euc-kr, utf-8...
.Open
.WriteText StringVal
.Position = 0
.Type = 1 '// adTypeBinary
If LCase(EncType) = "utf-8" Then .Position = 3 ' skip BOM
bytes = .Read
End With
ReDim result(UBound(bytes)) As String
For i = UBound(bytes) To 0 Step -1
b = bytes(i)
Select Case b
Case 97 To 122, 65 To 90, 48 To 57, 45, 46, 95, 126
result(i) = Chr(b)
Case 32
result(i) = space
Case 0 To 15
result(i) = "%0" & Hex(b)
Case Else
result(i) = "%" & Hex(b)
End Select
Next i
URLEncode1472 = Join(result, "")
End If
End Function
Private Sub test()
Debug.Print URLEncode1472("크리스마스", "euc-kr")
Debug.Print URLEncode1472("크리스마스", "utf-8")
Debug.Print URLEncode1472("크리스마스 축하", "euc-kr", True)
Debug.Print URLEncode1472("크리스마스 축하", "utf-8", True)
End Sub
예를 들어 '크리스마스'라는 텍스트의 euc-kr 인코딩값과 utf-8인코딩된 결과의 차이는 아래와 같습니다.
사실 URLEncoding이란 문자를 16진수 Hex값으로 바꾼 결과입니다.
한글 1글자당 euc-kr은 2바이트를 사용하고 utf-8은 3바이트를 사용합니다.
utf-8이 코드 범위가 더 커서 여러 나라 언어를 표현할 수 있는 장점이 있습니다.
반면 euc-kr은 여러나라 코드를 동시에 나타내지는 못하지만 메모리가 절약된다는 장점이 있습니다.
- EUC-KR인코딩된 문자의 URLEncode결과: %C5%A9%B8%AE%BD%BA%B8%B6%BD%BA
- UTF-8인코딩된 문자의 URLEncode결과: %ED%81%AC%EB%A6%AC%EC%8A%A4%EB%A7%88%EC%8A%A4
아래 실행 결과를 확인하면 Hex값과 URLEncode한 값이 서로 일치하는 것을 알 수 있습니다.
🤍 인코딩/디코딩 확인 사이트: https://dencode.com/
💛 관련 지식인: 링크
'PPT+VBA' 카테고리의 다른 글
ppt파일 목차 자동으로 만들기 (0) | 2022.05.23 |
---|---|
슬라이드 크기 변경할 때 자동으로 개체 가로:세로 비율 적용하기 (0) | 2022.05.18 |
표(테이블)안의 셀 텍스트에 윤곽선 서식 적용하기 (2) | 2022.05.15 |
현재 페이지/ 총 페이지 자동 업데이트 (2) | 2022.05.14 |
실시간 네이버 환율 및 유가 JSON 파싱 예제 (0) | 2022.05.03 |
파워포인트로 회의록 작성해서 엑셀에 저장하기 (0) | 2022.04.21 |
슬라이드쇼 2개를 연동해서 실행 (0) | 2022.04.20 |
차트를 완전한 자유형 도형(FreeForm)으로 변환 (0) | 2022.03.18 |
최근댓글