Unicode 编码¶
什么是 Unicode?¶
Unicode 是一套统一字符集,为世界上各种文字、符号和 emoji 分配唯一编号。这个编号通常叫码点(Code Point)。
例如:
Unicode 本身定义“字符对应哪个编号”,而 UTF-8、UTF-16、UTF-32 等是具体的存储和传输编码方式。
常见表示方式¶
| 表示 | 示例 | 说明 |
|---|---|---|
U+HHHH |
U+0041 |
Unicode 码点写法 |
\uHHHH |
\u0041 |
常见于 JSON、JavaScript 字符串 |
\xHH |
\x41 |
单字节十六进制转义 |
&#十进制; |
A |
HTML 十进制实体 |
&#x十六进制; |
A |
HTML 十六进制实体 |
UTF-8 编码¶
UTF-8 是最常见的 Unicode 编码方式,它使用 1 到 4 个字节表示一个字符。
| 字符 | 码点 | UTF-8 字节 |
|---|---|---|
| A | U+0041 | 41 |
| 中 | U+4E2D | E4 B8 AD |
| 😀 | U+1F600 | F0 9F 98 80 |
因此在 URL 编码里,中文通常会变成多个 %HH:
Unicode 转义解码示例¶
密文:
每组 \uHHHH 对应一个 Unicode 码点:
| 转义 | 码点 | 字符 |
|---|---|---|
\u0066 |
U+0066 | f |
\u006c |
U+006C | l |
\u0061 |
U+0061 | a |
\u0067 |
U+0067 | g |
得到:
常见混淆点¶
- Unicode 是字符集,UTF-8 是编码方式。
\u4F60表示码点,不等于 UTF-8 字节E4 BD A0。- emoji 等超过
U+FFFF的字符在 UTF-16 中可能用代理对表示。 - 同一个字符可能有不同规范化形式,例如组合字符和预组合字符。
CTF 识别要点¶
- 出现
\u、U+、\x等转义形式。 - 中文 URL 编码解出 UTF-8 字节后,需要按 UTF-8 解释。
- Web 题中可能利用 Unicode 同形字符或编码绕过。
- 多层题中常和 URL 编码、HTML 实体编码混合。