UTF-8 编码
UTF-8 使用一套固定的“模板”,将 Unicode 码点的二进制位填充到模板的 x 的位置上。
Unicode 码点范围(十六进制) | Unicode 码点范围(十进制) | UTF-8 编码模板(二进制) | 所需字节数 |
---|---|---|---|
U+0000 ~ U+007F | 0 ~ 127 | 0xxxxxxx | 1字节 |
U+0080 ~ U+07FF | 128 ~ 2047 | 110xxxxx 10xxxxxx | 2字节 |
U+0800 ~ U+FFFF | 2048 ~ 65535 | 1110xxxx 10xxxxxx 10xxxxxx | 3字节 |
U+10000 ~ U+10FFFF | 65536 ~ 1114111 | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx | 4字节 |
编码步骤(以汉字“中”为例):
查找码点:“中”的 Unicode 码点是 U+4E2D。
确定模板:U+4E2D 落在 U+0800 ~ U+FFFF 范围,所以使用 3 字节模板:1110xxxx 10xxxxxx 10xxxxxx。
转换为二进制:将码点 4E2D 转换为二进制(不足16位前面补0):
0100 1110 0010 1101
填充模板:从右向左(从低位到高位),将二进制位依次填充到模板的 x 位置。
模板:1110aaaa 10bbbbbb 10cccccccc (为了方便理解,把x分成了a,b,c组)
码点二进制:0100 111000 101101
填充后:
第一个字节:1110 + 0100 → 11100100 (十六进制 0xE4)
第二个字节:10 + 111000 → 10111000 (十六进制 0xB8)
第三个字节:10 + 101101 → 10101101 (十六进制 0xAD)
得到结果:“中”字的 UTF-8 编码是 0xE4 0xB8 0xAD。