在做爬虫和网页抓取项目时,找到目标资源的URL是至关重要的。

有时找到的 URL 看起来像这样

http:///font-.zip?–=%%3D%.zip%22=-276-0-

里面的u0026是编码,//不是标准的URL分隔符。

如果您直接将上述网址复制并粘贴到网络浏览器中,则无法访问它。

编码Unicode_unicode编码_unicode编码范围

为了获得可访问的 URL,需要对编码进行解码

接下来介绍一下解码方法

1. 手动编解码

说到编码,我两天两夜都没能聊完。

简单来说,每个字符,比如汉字“我”,都需要转换成二进制码,才能让计算机识别。

由于二进制代码很长,我们一般将二进制代码写成十六进制的形式。

在字符编码的历史发展过程中,出现了多种编码规则。 汉字“我”在不同的编码规则下有不同的编码规则。

编码是编码规则之一,它规定了用什么编码来表示什么字符。

例如,汉字“我”的编码是6211(十六进制)。 也就是说,规定一个规则,告诉计算机所有的编码都是6211才能识别为汉字“我”。

上面的代码0026代表什么字符?

这是一个简单的方法

打开一个空白Word,输入0026,然后按Alt+X即可快速知道该代码对应的字符。

unicode编码_编码Unicode_unicode编码范围

2.使用VBA解码编码

知道了代码的含义,我们还可以直接在vba中使用ChrW函数来解码代码,代码如下:

Sub excelofficeQQ1722187970()    '十六进制Unicode编码    sCode = 6211    '转换为VBA里面的十六进制表示法    str1 = "&H" & sCode    '将Unicode编码解码成字符    Debug.Print ChrW(str1)End Sub


上述代码实现了单个代码的解码。

如果有编码等字符,可以使用如下自定义函数进行解码:

Function UDecode(ByVal UCode As String)    arr = Split(UCode, "u")    If UBound(arr) >= 0 Then    For i = 1 To UBound(arr)        arr(i) = ChrW("&H" & Left(arr(i), 4)) & Mid(arr(i), 5, 1024)    Next i        UDecode = Join(arr, "")    Else        UDecode = UCode    End If    Debug.Print UDecodeEnd Function



上面介绍的方法和思想就是按照编码的原理进行解码。

对于等常见的编码,也可以直接调用JS进行整体分析,无需逐字符解码。 代码如下:

Function UDecode(ByVal UCode As String) As String    Dim oHtml As Object    Set oHtml = CreateObject("htmlfile")    With oHtml        Set oWindow = .parentWindow        With oWindow            .execScript "var sResult='" & UCode & "'"            UDecode = .sResult        End With    End With    Set oWindow = Nothing    Set oHtml = NothingEnd Function



将需要解码的内容放入JS中,运行一次,就是解码后的内容。 真是太神奇了。

三、总结

本文简单介绍了什么是编码,然后给出了VBA循环解码和调用JS解码两个常用的自定义函数。

我推荐调用JS解码,方便快捷,也可以快速解析URL的其他部分。

unicode编码_编码Unicode_unicode编码范围

好了,今天的主题就讲到这里吧,不管如何,能帮到你我就很开心了,如果您觉得这篇文章写得不错,欢迎点赞和分享给身边的朋友。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注