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编码 | 说明 |
|---|---|---|---|---|
| A | U+0041 | 1 | 41 | ASCII字符 |
| ≢ | U+2262 | 3 | E2 89 A2 | 数学符号"不等同于" |
| Α | U+0391 | 2 | CE 91 | 希腊大写字母Alpha |
| . | U+002E | 1 | 2E | ASCII句点 |
示例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 " | 6 | 6 | ASCII (1字节/字符) |
| "世界" | 2 | 6 | 中文 (3字节/字符) |
| " " | 1 | 1 | ASCII空格 |
| "🌍" | 1 | 4 | Emoji (4字节) |
| 总计 | 10 | 17 |
字符类型示例总结
字符范围 示例字符 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字节)