UTF-8编码
竞赛/基础
UTF-8 编码规则与合法性判断
UTF-8 编码基本规则
UTF-8 是一种可变长度的 Unicode 编码方式,使用 1 到 4 个字节表示一个字符。
字节结构模式
| 字符长度 | 第一个字节范围 | 第一个字节模式 | 后续字节模式 | 表示的 Unicode 范围 |
|---|---|---|---|---|
| 1 字节 | 0 x 00-0 x 7 F | 0xxxxxxx |
无 | U+0000 - U+007 F |
| 2 字节 | 0 xC 0-0 xDF | 110xxxxx |
10xxxxxx |
U+0080 - U+07 FF |
| 3 字节 | 0 xE 0-0 xEF | 1110xxxx |
10xxxxxx |
U+0800 - U+FFFF |
| 4 字节 | 0 xF 0-0 xF 7 | 11110xxx |
10xxxxxx |
U+10000 - U+10 FFFF |
合法性判断要点
1. 起始字节模式
- 必须符合上述四种模式之一
- 不能出现
0xFF、0xFE、0xFD等无效起始字节
2. 连续字节模式
- 多字节序列中,第二个及后续字节必须以
10开头(范围 0 x 80-0 xBF)
3. 编码效率原则
- 不能使用更长的字节序列表示本可以用更短序列表示的字符(禁止过度编码)
- 例如:ASCII 字符(0 x 00-0 x 7 F)必须用单字节表示
4. Unicode 有效性
- 编码的码点必须在有效 Unicode 范围内(U+0000 到 U+10 FFFF)
- 不能编码代理对区域(U+D 800 到 U+DFFF)
示例分析
✅ 合法的 UTF-8 序列
- 0 xF 0 0 x 90 0 x 80 0 x 80:4 字节序列,表示 U+10000
- 第一个字节:0 xF 0 =
11110000✓ - 后续字节:0 x 90 =
10010000, 0 x 80 =10000000, 0 x 80 =10000000✓ - 码点 U+10000 在有效范围内 ✓
- 第一个字节:0 xF 0 =
❌ 非法的 UTF-8 序列
A. 0 xC 0 0 x 80
- 过度编码:表示 U+0000,但应使用单字节 0 x 00
- 违反编码效率原则
C. 0 x 80 0 x 80 0 x 80
- 缺少有效的起始字节
- 所有字节都是连续字节模式,没有起始字节
D. 0 xFF 0 xFE 0 xFD
- 第一个字节 0 xFF =
11111111不符合任何起始字节模式 - 后续字节也不完全符合连续字节模式
快速检查方法
- 检查起始字节:确认第一个字节符合四种有效模式之一
- 检查连续字节:确认后续字节都以
10开头 - 检查编码效率:确认没有用长序列编码短序列字符
- 检查码点范围:确认编码的 Unicode 码点有效
常见错误
- 过度编码:用多字节表示单字节字符
- 不完整序列:缺少连续字节
- 无效起始字节:使用了不符合规范的起始字节
- 码点越界:编码了无效的 Unicode 码点
掌握这些规则后,就能快速判断任何字节序列是否为合法的 UTF-8 编码。

浙公网安备 33010602011771号