You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 09:12:04