Unicode: (Universal Code 统一码)是一个囊括了世界上所有字符的字符集,其中每一个字符都对应有唯一的编码值(code point),然而它并不是一种什么编码格式,仅仅是字符集而已。Unicode 字符不管具体怎么编码和存储。 UTF-8、UTF-16、UTF-16是Unicode的实现
UTF-8编码规则如下:
概括的说:对于某一个字符的UTF-8编码,如果只有一个字节则其最高二进制位为0;如果是多字节,其第一个字节从最高位开始,连续的二进制位值为1的个数决定了其编码的位数,其余各字节均以10开头。UTF-8最多可用到6个字节。
1字节 0xxxxxxx
2字节 110xxxxx 10xxxxxx
3字节 1110xxxx 10xxxxxx 10xxxxxx
4字节 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
5字节 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
6字节 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
Unicode符号范围 | UTF-8编码方式
(十六进制) | (二进制)
--------------------+---------------------------------------------
0000 ~ 007F | 0xxxxxxx
0080 ~ 07FF | 110xxxxx 10xxxxxx
0800 ~ FFFF | 1110xxxx 10xxxxxx 10xxxxxx
1 0000 ~1F FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
如果一个字节的第一位是0,则这个字节单独就是一个字符;如果第一位是1,则连续有多少个1,就表示当前字符占用多少个字节。
BOM:在一个文本文件或者一段字符编码前加上几个固定的字节用于识别,这些字节保证不对应任何一个字符,所以软件一读就能验明正身:
以汉字「中」为例,Unicode码是4e2d,需要用两个字节存储,一个字节是4e,另一个字节是2d。存储的时候,4e在前,2d在后,就是Big endian(高位字节在前,阅读顺序)方式;2d在前,4e在后,就是Little endian(低位字节在前)方式。Windows的记事本还有Windows其它地方所谓的Unicode编码,其实是UTF-16LE