Skip to main content

7. Examples (示例)

本章提供了UTF-8编码的实际示例,展示了不同语言和字符的编码方式。

示例1: 拉丁字母和数学符号

字符序列 U+0041 U+2262 U+0391 U+002E "A<NOT IDENTICAL TO><ALPHA>." 在UTF-8中编码如下:

字符:    A         ≢         Α         .
Unicode: U+0041 U+2262 U+0391 U+002E
UTF-8: 41 E2 89 A2 CE 91 2E

完整序列:
--+--------+-----+--
41 E2 89 A2 CE 91 2E
--+--------+-----+--

详细分析

字符Unicode字节数UTF-8编码说明
AU+0041141ASCII字符
U+22623E2 89 A2数学符号"不等同于"
ΑU+03912CE 91希腊大写字母Alpha
.U+002E12EASCII句点

示例2: 韩文

字符序列 U+D55C U+AD6D U+C5B4 (韩文 "한국어" [hangugeo],意为"韩语") 在UTF-8中编码如下:

字符:    한        국        어
Unicode: U+D55C U+AD6D U+C5B4
UTF-8: ED 95 9C EA B5 AD EC 96 B4

完整序列:
--------+--------+--------
ED 95 9C EA B5 AD EC 96 B4
--------+--------+--------

编码分析

한 (U+D55C):
0xD55C = 1101 0101 0101 1100
1110xxxx 10xxxxxx 10xxxxxx
1101 010101 011100
11101101 10010101 10011100 = ED 95 9C

국 (U+AD6D):
0xAD6D = 1010 1101 0110 1101
1110xxxx 10xxxxxx 10xxxxxx
1010 110101 101101
11101010 10110101 10101101 = EA B5 AD

어 (U+C5B4):
0xC5B4 = 1100 0101 1011 0100
1110xxxx 10xxxxxx 10xxxxxx
1100 010110 110100
11101100 10010110 10110100 = EC 96 B4

示例3: 日文

字符序列 U+65E5 U+672C U+8A9E (日文 "日本語" [nihongo],意为"日语") 在UTF-8中编码如下:

字符:    日        本        語
Unicode: U+65E5 U+672C U+8A9E
UTF-8: E6 97 A5 E6 9C AC E8 AA 9E

完整序列:
--------+--------+--------
E6 97 A5 E6 9C AC E8 AA 9E
--------+--------+--------

编码分析

日 (U+65E5):
0x65E5 = 0110 0101 1110 0101
1110xxxx 10xxxxxx 10xxxxxx
0110 010111 100101
11100110 10010111 10100101 = E6 97 A5

本 (U+672C):
0x672C = 0110 0111 0010 1100
1110xxxx 10xxxxxx 10xxxxxx
0110 011100 101100
11100110 10011100 10101100 = E6 9C AC

語 (U+8A9E):
0x8A9E = 1000 1010 1001 1110
1110xxxx 10xxxxxx 10xxxxxx
1000 101010 011110
11101000 10101010 10011110 = E8 AA 9E

示例4: 中文(带BOM)

字符 U+233B4 (中文字符,意为"树桩"),前面加上UTF-8 BOM,在UTF-8中编码如下:

BOM +    𣎴
U+FEFF U+233B4
EF BB BF F0 A3 8E B4

完整序列:
--------+-----------
EF BB BF F0 A3 8E B4
--------+-----------

详细分析

BOM (U+FEFF)

U+FEFF = 1111 1110 1111 1111
1110xxxx 10xxxxxx 10xxxxxx
1111 111011 111111
11101111 10111011 10111111 = EF BB BF

𣎴 (U+233B4)

U+233B4 = 0010 0011 0011 1011 0100 (21位)
11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
00010 001100 111011 010100
11110000 10100011 10001110 10110100 = F0 A3 8E B4

注意: 这是一个4字节UTF-8序列,编码了超出基本多文种平面 (BMP) 的字符。

综合示例:多语言文本

文本: "Hello 世界 🌍"
Unicode: U+0048 U+0065 U+006C U+006C U+006F U+0020 U+4E16 U+754C U+0020 U+1F30D

UTF-8编码:
H e l l o 世 界 🌍
48 65 6C 6C 6F 20 E4 B8 96 E7 95 8C 20 F0 9F 8C 8D

完整序列:
48 65 6C 6C 6F 20 E4 B8 96 E7 95 8C 20 F0 9F 8C 8D

字节数统计

文本部分字符数字节数说明
"Hello "66ASCII (1字节/字符)
"世界"26中文 (3字节/字符)
" "11ASCII空格
"🌍"14Emoji (4字节)
总计1017

字符类型示例总结

字符范围           示例字符    UTF-8字节    字节数
──────────────────────────────────────────────────
ASCII A 41 1
(U+0000-U+007F) . 2E 1

拉丁扩展/ © C2 A9 2
西里尔/阿拉伯 Α CE 91 2
(U+0080-U+07FF) ≢ E2 89 A2 3*

中日韩/ 你 E4 BD A0 3
大部分语言 日 E6 97 A5 3
(U+0800-U+FFFF) 한 ED 95 9C 3

辅助平面/ 𣎴 F0 A3 8E B4 4
Emoji/历史文字 🌍 F0 9F 8C 8D 4
(U+10000-U+10FFFF)😀 F0 9F 98 80 4

注意: U+2262虽然在U+0800-U+FFFF范围内,但实际是3字节。

编码对比

相同文本的不同编码

文本: "你好"

UTF-8:
E4 BD A0 E5 A5 BD (6字节)

UTF-16 BE (Big Endian):
4F 60 59 7D (4字节)

UTF-32 BE:
00 00 4F 60 00 00 59 7D (8字节)

GBK (遗留编码):
C4 E3 BA C3 (4字节)

相关链接