跳转至

常见编码技术总结


1. 字母表编码

A-Z/a-z 对应 1-26 或 0-25,将字母映射为数字序号。


2. ASCII 编码

将字符映射为 0-127 的十进制数值。

字符范围 十进制
0-9 48-57
A-Z 65-90
a-z 97-122

变体

  • 二进制编码:将 ASCII 数值转为二进制(7 或 8 位)。
  • 十六进制编码:将 ASCII 数值转为十六进制(如 A → 0x41,a → 0x61)。
  • 八进制编码:将 ASCII 数值转为八进制。

3. Base 系列编码

Base N 使用 N 个可打印字符进行编码。

Base64

  • 使用 64 个字符(A-Z、a-z、0-9、+、/),2^6 = 64,每 6 bit 为一个单元。
  • 3 字节(24 bit)编码为 4 个 Base64 字符。
  • 不足 3 字节时补 0,编码后末尾加 = 填充(最多 2 个 =)。
  • 常用作邮件传输编码、Data URI、密钥存储等。

Base32

  • 使用 32 个字符(A-Z、2-7),2^5 = 32,每 5 bit 为一个单元。
  • 5 字节(40 bit)编码为 8 个 Base32 字符。
  • 不足 5 字节时补 0,末尾用 = 填充(最多 6 个 =)。

其他 Base 编码

  • Base16(Hex):每 4 bit 为一个单元,使用 0-9、A-F。
  • Base85(Ascii85):使用 85 个字符,编码效率更高,常见于 PDF 和 Git 二进制 patch。
  • Base58:去除容易混淆的字符(0、O、I、l),用于比特币地址等场景。
  • Base62:0-9、A-Z、a-z,用于短链接等场景。

4. URL 编码(百分号编码)

将非 ASCII 字符和保留字符转换为 %XX 格式(XX 为十六进制值)。

  • 空格 → %20 或 +
  • 常用于 HTTP 请求参数传递。

5. Unicode 编码

Unicode 字符的四种常见表示形式:

形式 示例(The)
&#x [Hex] The
&# [Decimal] The
\U [Hex] \U0054\U0068\U0065
\U+ [Hex] \U+0054\U+0068\U+0065

常见 Unicode 编码方案: - UTF-8:变长编码,1-4 字节,兼容 ASCII。 - UTF-16:2 或 4 字节,分 LE/BE(小端/大端)两种字节序。 - UTF-32:固定 4 字节。


6. HTML 实体编码

HTML 中使用特殊字符串表示字符:

  • 命名实体:&lt;(<)、&gt;(>)、&amp;(&)、&quot;(")、&nbsp;(空格)
  • 数字实体:&#60;(十进制)、&#x3C;(十六进制)

7. XXencode

与 Base64 类似的编码方式,每 3 字节编码为 4 个字符,字符集为:+-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz。


8. UUencode

Unix-to-Unix 编码,用于在 Unix 系统间传输二进制文件。与 Base64 类似,但字符集不同(从空格开始的可打印字符)。现代多被 Base64 取代。


9. Quoted-Printable 编码

用于电子邮件编码,可打印 ASCII 字符保持不变,非 ASCII 字符用 =XX 表示。末尾软换行用 = 标识。


10. 摩尔斯电码(Morse Code)

用点(.)和划(-)表示字符:

  • A → .-
  • SOS → ... --- ...

11. 敲击码(Tap Code)

基于 5×5 网格的编码方式,用敲击次数表示行和列:

1 2 3 4 5
1 A B C/K D E
2 F G H I J
3 L M N O P
4 Q R S T U
5 V W X Y Z

12. 霍夫曼编码(Huffman Coding)

变长编码,根据字符出现频率构造最优二叉树进行编码。常用于数据压缩(如 ZIP、JPEG)。

  • 高频字符使用短编码,低频字符使用长编码。
  • 是一种前缀编码(任一编码都不是另一编码的前缀)。

13. 条形码(Barcode)

用宽度不等的黑白条按规则排列表示信息。

类型 字符集 说明
EAN-13 13 位数字 国际通用商品条码
Code-39 39 字符 字母数字条码
Code-128 128 字符 高密度条码
PDF417 堆叠式 二维条形码

14. 二维码(QR Code)

用黑白相间的几何图形在二维平面上记录信息。

  • QR Code:最常见,支持数字、字母、汉字、二进制。
  • Data Matrix:小尺寸高容量,常用于电子元件、票据。
  • PDF417:堆叠式二维码。
  • 支持纠错等级 L/M/Q/H。

15. Punycode

将 Unicode 域名编码为 ASCII 兼容格式,用于国际化域名(IDN)。

  • 中文.com → xn--fiq228c.com

16. Shellcode / 转义编码

编程语言和 shell 中的转义表示:

形式 示例 说明
\xNN \x41 → A 十六进制
\NNN \101 → A 八进制
\uNNNN \u0041 → A Unicode(JS)
\x{NN} \x{41} → A Perl 风格

17. JSFuck / AAEncode / JJEncode

基于 JavaScript 的混淆编码:

  • JSFuck:只用 []()!+ 六个字符构造任意 JS 代码。
  • AAEncode:将 JS 代码编码为颜文字风格。
  • JJEncode:将 JS 代码编码为特殊符号组合。

18. 其他编码

编码 说明
Baudot 码 5 bit 电传打字机编码,电报通信历史编码
EBCDIC IBM 大型机的字符编码
GSM 7-bit 手机短信默认编码,160 字符限制即基于此
ROT13 字母旋转 13 位,A↔N,常用于论坛隐藏剧透
Brainfuck 极简编程语言,><+-.,[] 八个字符

编码识别技巧

  • 有大量 % → URL 编码
  • 以 = 结尾,只有字母数字和 +/ → Base64
  • 只有 A-Z 和 2-7,可能有多个 = → Base32
  • 只有 0-1,长度 7 或 8 的倍数 → 二进制 ASCII
  • 只有 0-9、A-F → 十六进制
  • 有 &# 和 ; → HTML/Unicode 实体编码
  • 有 . 和 - → 摩尔斯电码
  • 以 +- 开头的字母数字串 → XXencode