Unicode、UTF-8 和 UTF-16

Mar 29, 2016


简单来说,Unicode规定了每个字符的编码,UTF-8UTF-16则规定了用什么方式去存储这个编码。

Unicode 是俗称,全称为 Universal Multiple-Octet Coded Character Set,简称 UCS。 它占用两个字节 16 位空间,所以可以表示 2^16 的字符数。

但是如果都按照 Unicode 去存储,用英语的人就吃亏了,因为他们只用到低 8 位,高 8 位全是0。 所以就有了 UTF-8 这个编码方式。 引用一下知乎上的回答。

UTF-8 是可变长的编码。

UTF-8的编码规则很简单,只有二条:

  1. 对于单字节的符号,字节的第一位设为0,后面7位为这个符号的unicode码。因此对于英语字母,UTF-8编码和ASCII码是相同的。
  2. 对于n字节的符号(n>1),第一个字节的前n位都设为1,第n+1位设为0,后面字节的前两位一律设为10。剩下的没有提及的二进制位,全部为这个符号的unicode码。 下表总结了编码规则,字母x表示可用编码的位。
Unicode符号范围 UTF-8编码方式
十六进制 二进制
0000 0000-0000 007F 0xxxxxxx
0000 0080-0000 07FF 110xxxxx 10xxxxxx
0000 0800-0000 FFFF 1110xxxx 10xxxxxx 10xxxxxx
0001 0000-0010 FFFF 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

作者:倪飞翔 链接:https://www.zhihu.com/question/23374078/answer/88200742

而 UTF-16 规定就用两个字节表示一个字符。因此不用像 UTF-8 一样用一些位来标示这个字占了几个字节。所以汉字直接可以用两个字节表示。 在基本上都是汉字的应用里, UTF-16 较省内存。

以上。