如果UNICODE
字符由2个
字节表示,则编码成UTF-8很可能需要3个
字节。而如果UNICODE
字符由4个字节表示,则编码成UTF-8可能需要6个字节。用4个或6个
字节去编码一个UNICODE
字符可能太多了,但很少会遇到那样的UNICODE字符。 UTF-8转换表表示如下:
UNICODE
|
bit数
|
UTF-8
|
byte数
|
备注
|
0000 0000 ~
0000 007F
|
0~7
|
0XXX XXXX
|
1
| |
0000 0080 ~
0000 07FF
|
8~11
|
110X XXXX
10XX XXXX
|
2
| |
0000 0800 ~
0000 FFFF
|
12~16
|
1110XXXX
10XX XXXX
10XX XXXX
|
3
|
基本定义范围:0~FFFF
|
0001 0000 ~
001F FFFF
|
17~21
|
1111 0XXX
10XX XXXX
10XX XXXX
10XX XXXX
|
4
|
Unicode6.1定义范围:0~10 FFFF
|
0020 0000 ~
03FF FFFF
|
22~26
|
1111 10XX
10XX XXXX
10XX XXXX
10XX XXXX
10XX XXXX
|
5
| |
0400 0000 ~
7FFF FFFF
|
27~31
|
1111 110X
10XX XXXX
10XX XXXX
10XX XXXX
10XX XXXX
10XX XXXX
|
6
|
实际表示ASCII
字符的UNICODE字符,将会编码成1个
字节,并且UTF-8表示与ASCII字符表示是一样的。所有其他的UNICODE
字符转化成UTF-8将需要至少2个
字节。每个
字节由一个
换码序列开始。第一个
字节由唯一的
换码序列,由n位连续的1加一位0组成, 首字节连续的1的个数表示
字符编码所需的字节数。
示例
UNICODE uCA(11001010) 编码成UTF-8将需要2个
字节:
uCA -> C3 8A
UNICODE uF03F (11110000 00111111) 编码成UTF-8将需要3个
字节:
u F03F -> EF 80 BF
Unicode 16进制
|
Unicode 2进制
|
bit数
|
UTF-8 2进制
|
UTF-8 16进制
|
CA
|
1100 1010
|
8
|
1100 0011
1000 1010
|
C3 8A
|
F0 3F
|
1111 0000 0011 1111
|
16
|
11101111
1000 0000
1011 1111
|
EF 80 BF
|
由上分析可以看到,UNICODE到UTF-8的转换就是先确定编码所需要的UTF-8编码
字节数,然后用UNICODE编码位从低位到高位依次填入上面表示为x的位上,不足的高位以0补充。