如何用vba对Unicode编码解码?

在做爬虫、网抓项目时,必不可少的要寻找目标资源的URL。

 

有时候返回的URL是形如这样的

 

http:\/\/archive.cdn.fonts.net.cn\/font-38195-191216220816.zip?response-content-disposition=attachment%3Bfilename%3D%22FenPinYinTi.zip%22\u0026auth_key=1576547567-5df834d15f8337x03953276-0-86e044b4c94a2e46060223996a036d6e

 

里面的\u0026就是Unicode编码,然后\/\/也不是规范的URL分隔符。

 

如果直接把上述URL拷贝粘贴到网页浏览器中,是没有办法访问的。

 

 

为了获取可以访问的URL,需要将Unicode编码解码。

 

接下来介绍解码的方法

一、手动Unicode编码解码

谈起编码,花上2天2夜都聊不完。

 

简单的说,每一个字符,比如中文字符“我”,要让计算机能够识别,需要把它转换为一个二进制编码。

 

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

 

在字符的编码历史发展中出现了很多种编码规则,一个中文字符“我”在不同的编码规则下,对应的编码是不一样的。

 

Unicode编码就是其中的一种编码规则,它规定了用什么编码来表示什么字符。

 

比如中文字符“我”的Unicode编码是6211(十六进制)。也就是规定了一个规则,告诉计算机凡是Unicode编码是6211的都识别为中文字符“我”。

 

那上文中的Unicode编码0026又表示什么字符呢。

 

这里介绍一个简单的方法

 

打开一个空白Word,输入0026,然后按下Alt+X组合快捷键,即可快速地知道该Unicode编码对应的字符。

 

二、用VBA对Unicode编码解码

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

 

 

上面的代码实现的是单个Unicode编码的解码。

 

如果即有Unicode编码又有其它字符,可以使用如下的自定义函数解码:

上述介绍的方法和思路是按照Unicode编码的原理进行解码。

 

对于Unicode编码这种常见的编码,还可以用直接调用JS整体解析,无需逐个字符解码,代码如下:

把要解码的内容放到JS里面跑一遍出来后就是解码后的内容,真是太神奇了。

三、总结

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

对于调用JS解码是我比较推荐的,方便快捷,而且对于URL的其它部分也可以快速地解析。

       

发表评论