Excel VBA 解码特定字符集 (即 euc-kr) 的 URL。

6 浏览
0 Comments

Excel VBA 解码特定字符集 (即 euc-kr) 的 URL。

在Excel VBA中有没有一种方法可以通过指定字符集来解码URL?我没有管理员权限来安装外部软件包,所以我需要一个独立的解决方案来使用Excel VBA(或本地环境)。

我找到了一个链接这里用于解码URL(下面的代码供参考);然而,它无法解码韩文字符。我收到以下错误消息:运行时错误'-2147352319(80020101)'对象'JScriptTypeInfo'的方法'decode'失败。

我一直没有找到Excel VBA的解决方案。(我正在运行Windows 10;Microsoft Excel 365,版本2107;添加了韩文语言包;区域设置-非Unicode程序的语言:韩文(韩国))。

下面是一个正确结果的示例(使用字符集'Korean (euc-kr)'正确解码/编码 这里):

  • 编码: %28%C1%D6%29%B7%B9%B0%ED%C4%DA%B8%AE%BE%C6
  • 使用'euc-kr'解码: (주)레고코리아

下面是代码参考:

Sub Testing()
Debug.Print UriDecode("%28%C1%D6%29%B7%B9%B0%ED%C4%DA%B8%AE%BE%C6")
End Sub
Function UriDecode(strText As String)
Static objHtmlFile As Object
If objHtmlfile Is Nothing Then
    Set objHtmlfile = CreateObject("htmlfile")
    objHtmlfile.parentWindow.execScript "function decode(s) {return decodeURIComponent(s)}", "jscript"
End If
UriDecode = objHtmlfile.parentWindow.decode(strText)
End Function

0
0 Comments

Excel VBA 解码特定字符集的 URL(即 euc-kr)的原因是什么?如何解决这个问题?

在这个问题中,我们可以看到一段 VBA 代码,它通过解码特定字符集的 URL 来实现。代码中包含了一个名为 "ToKr" 的函数,它使用了 ADODB.Stream 对象来打开和写入 URL,并将字符集设置为 "euc-kr"。然后,函数读取解码后的文本并返回。

出现这个问题的原因是,URL 中的一些字符被进行了编码,以便在传输过程中能够正确解析。在这种情况下,URL 中的字符被编码为 euc-kr 字符集。这可能是因为在特定的环境中,需要使用这种字符集来正确解析 URL,以便显示或处理其中的数据。

要解决这个问题,可以使用上述提供的 VBA 代码。通过调用 "ToKr" 函数,并将需要解码的 URL 作为参数传递给它,代码将返回解码后的文本。在输出中,我们可以看到解码后的文本被放置在 "A1" 单元格中。

这段代码的关键部分是 "ToKr" 函数和 "URLToByteArray" 函数。"ToKr" 函数使用 ADODB.Stream 对象来打开和写入 URL,然后将字符集设置为 "euc-kr"。然后,它使用 "URLToByteArray" 函数将 URL 转换为字节数组,并通过 ADODB.Stream 对象的 "readtext()" 方法将字节数组转换为文本。最后,函数返回解码后的文本。

"URLToByteArray" 函数是一个辅助函数,它将编码后的 URL 转换为字节数组。在这个函数中,我们使用了一个循环来遍历 URL 中的每个字符,并使用 Collection 对象来存储每个字符的字节值。然后,我们将字节数组从 Collection 对象中提取出来,并返回该字节数组。

通过使用这些函数,我们可以成功解码特定字符集的 URL,以便在 Excel VBA 中正确处理和显示其中的数据。

总之,通过使用 VBA 代码中提供的函数,我们可以解码特定字符集的 URL,并在 Excel VBA 中正确处理和显示其中的数据。这种解码过程涉及到将 URL 转换为字节数组,并使用 ADODB.Stream 对象将字节数组转换为文本。这个解码过程可以帮助我们在特定环境中正确解析和处理 URL 中的数据。

0