Unicode给每一个字符分配一个唯一的值,称为码点,但并不指定如何用这些值来表示原始文本。码点的形式为U+nnnn,其中nnnn指的是这个码点的十六进制值。Unicode目前支持超过100 000个字符。
UTF-8是一个Unicode相关的标准,是一种使用码点来代表原始文本的简便方法。尽管有许多表示Unicode的方法,但是UTF8具有很大优势,它向后兼容ASCII编码。UTF-8用1-4个字节来表示一个码点。每个出现ASCII字符集中的字符都被编码为一个字节,与对应的ASCII编码值是一样的。
UTF8的编码方式很直观,下面是其编码规则:
(1)如果最高有效位是0,那么这个字节的形式为0xxxxxxx,编码长度为1个字节。这个字节代表了码点,由后7位表示,它同时也代表了具有相同7位ASCII值的那个字符。
(2)如果第一个字节的最高有效位是1,那么其编码长度为2-4个字节,接下来的字节位就指示了用一元编码的长度。
A:两字节的编码的第一个字节形式为110xxxxx
B:三字节的编码的第一个字节形式为1110xxxx
C:四字节的编码的第一个字节形式为11110xxx
一个多字节编码的第二个及其后字节的形式都为10xxxxxx。通过检测任意字节的两个最高有效位,可以判断该字节是否为一个编码的起始字节。
(3)因为首字节的最高有效位被占用了,所以2-4字节编码的码点值由后面未被占用的位来决定。两字节的编码能力表示范围 U+0080 -- U+07FF内的码点。三字节的编码能表示范围U+0800 -- U+FFFF内的码点,四字节的编码能表示U+10000及以上范围内的码点。