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,代表不是字符起始位置。