前言
在我的工作中,使用爬虫过程中常常会遇到各种各样的编码解码技术,对于网站返回的响应内容,常常需要一眼就要知道该网站用的什么编码技术?需要用什么解码技术进行解码?请求体内容使用了哪种编码技术?本篇是我了解编码系列的后续,主要内容讲述爬虫工作中常见的编码技术。
常见的编码技术
Unicode 编码
Unicode 在《论编码重要性(一):你所不了解的字符编码》已经进行了详细说明,此处不再进行说明。
以 “Unicode 编码” 为例,说明 Unicode 编码后的内容形式。
1 | // 原文 |
UTF-8 编码
UTF-8 在《论编码重要性(一):你所不了解的字符编码》已经进行了详细说明,此处不再进行说明。
以 “UTF-8 编码” 为例,说明 UTF-8 编码后的内容形式。
1 | // 原文 |
UrlEncode 编码
Url 编码通常也被称为百分号编码(Url Encoding,also known as percent-encoding),是因为它的编码方式非常简单,使用 % 百分号加上两位的字符——0123456789ABCDEF——代表一个字节的十六进制形式。Url 编码默认使用的字符集是 US-ASCII。
对于非 ASCII 字符,需要使用 ASCII 字符集的超集进行编码得到相应的字节,然后对每个字节执行百分号编码。对于 Unicode 字符,RFC 文档建议使用 utf-8 对其进行编码得到相应的字节,然后对每个字节执行百分号编码。如 “中文” 使用 UTF-8 字符集得到的字节为 0xE4 0xB8 0xAD 0xE6 0x96 0x87,经过 Url 编码之后得到 “%E4%B8%AD%E6%96%87”。
例如,Url 参数字符串中使用 key=value 键值对这样的形式来传参,键值对之间以 & 符号分隔,如 / s?q=abc& ie=utf-8。如果你的 value 字符串中包含了 = 或者 &,那么势必会造成接收 Url 的服务器解析错误,因此必须将引起歧义的 & 和 = 符号进行转义,也就是对其进行编码。
1 | // 原文 |
Base64 编码
Base64 是网络上最常见的用于传输 8Bit 字节码的编码方式之一,Base64 就是一种基于 64 个可打印字符来表示二进制数据的方法。这 64 个可打印字符 a-z,A-Z,0-9 就占 62 字符,剩下 2 个字符不同系统可能使用不同,经常是:“+/”。
1 | // 原文 |
Java 代码实现:
1 | import java.util.Base64; |
Hex 编码
Hex 编码就是把一个 8 位的字节数据用两个十六进制数展示出来,编码时,将 8 位二进制码重新分组成两个 4 位的字节,其中一个字节的低 4 位是原字节的高四位,另一个字节的低 4 位是原数据的低 4 位,高 4 位都补 0,然后输出这两个字节对应十六进制数字作为编码。
比如 ASCII 码 A 的 Hex 编码过程为:
1 | ASCII 码:A (65) |
参考博文
[1].Web 开发须知:URL 编码与解码
[2].1-Hex 编码