跳转至

Unicode 编码

什么是 Unicode?

Unicode 是一套统一字符集,为世界上各种文字、符号和 emoji 分配唯一编号。这个编号通常叫码点(Code Point)。

例如:

A    -> U+0041
你   -> U+4F60
U+1F600 表示 grinning face emoji

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:

中 -> E4 B8 AD -> %E4%B8%AD

Unicode 转义解码示例

密文:

\u0066\u006c\u0061\u0067

每组 \uHHHH 对应一个 Unicode 码点:

转义 码点 字符
\u0066 U+0066 f
\u006c U+006C l
\u0061 U+0061 a
\u0067 U+0067 g

得到:

flag

常见混淆点

  • 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 实体编码混合。