Excel VBA如何指定euc-kr等字符集实现URL解码且无需安装外部包
解决Excel VBA指定字符集URL解码方案
问题原因
你之前使用的decodeURIComponent是Javascript内置方法,仅支持UTF-8编码的URL解码,当输入euc-kr这类非UTF-8的编码内容时就会触发报错。
自包含解决方案代码
以下方案完全依赖Windows系统自带的ADODB组件,无需管理员权限、无需安装任何外部包,支持自定义指定字符集:
Function UrlDecodeWithCharset(ByVal encodedStr As String, ByVal charset As String) As String Dim stream As Object Dim byteArr() As Byte Dim i As Long, pos As Long ' 按标准URL编码规则将+替换为空格 encodedStr = Replace(encodedStr, "+", " ") ReDim byteArr(Len(encodedStr) - 1) i = 0 pos = 1 Do While pos <= Len(encodedStr) If Mid(encodedStr, pos, 1) = "%" Then ' 将%后的两位十六进制字符转为字节 byteArr(i) = CByte("&H" & Mid(encodedStr, pos + 1, 2)) pos = pos + 3 Else ' 普通字符直接转ASCII字节 byteArr(i) = AscB(Mid(encodedStr, pos, 1)) pos = pos + 1 End If i = i + 1 Loop ReDim Preserve byteArr(i - 1) ' 按指定字符集将字节数组转为字符串 Set stream = CreateObject("ADODB.Stream") With stream .Charset = charset .Mode = 3 .Type = 1 .Open .Write byteArr .Position = 0 .Type = 2 UrlDecodeWithCharset = .ReadText .Close End With Set stream = Nothing End Function
使用示例
Sub TestKoreanDecode() ' 第二个参数指定解码字符集为euc-kr即可 Debug.Print UrlDecodeWithCharset("%28%C1%D6%29%B7%B9%B0%ED%C4%DA%B8%AE%BE%C6", "euc-kr") ' 输出结果:(주)레고코리아 End Sub
注意事项
如果需要解码其他字符集的内容,仅需修改第二个参数即可,比如解码GBK编码的内容可传入"gbk"。你当前系统非Unicode程序语言已设置为韩语,可完美支持euc-kr编码转换,不会出现乱码问题。
内容的提问来源于stack exchange,提问作者Matt
相关产品推荐
相关产品推荐

