Unicode 如何编码成 UTF-8
Unicode 是字符集(charset),UTF-8、UTF-16 只是 Unicode 的编码规则(encoding)。
标准的 UTF-8 对 Unicode 分为4种变长的编码格式。
区间 | 字节数 | 编码格式 |
---|---|---|
0~0x7F | 1 | 0xxxxxxx |
0x80~0x7FF | 2 | 110xxxxx 10xxxxxx |
0x800~0xFFFF | 3 | 1110xxxx 10xxxxxx 10xxxxxx |
0x10000~0x10FFFF | 4 | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx |
也就是说,对于英文字母这种ASCII字符,UTF-8与ASCII是兼容的,都采用1字节存储。
对于希伯来语字母 א
,UTF-8采用两个字节存储,方法是把它的 Unicode 码 0x05d0 的二进制形式拆成两部分,后6位前补10,再前数5位前补110,拼到一起(余下全为0),即为 0xd790。
0x05D0 = b0000010111 010000 11010111 10010000 = 0xD790
同样道理,汉字“我”采用3字节,Unicode 码拆成3部分:
0x6211 = b0110 001000 010001 11100110 10001000 10010001 = 0xE68891
总结来看,字节起始为0则为单字节字符,起始为110、1110、11110分别代表有2个、3个、4个字节组合代表一个字符。其它字节起始必然全为10,代表不是字符起始位置。