Unicode 是字符集
在早期, Unicode 是集标准与编码形式于一身的,既面向标准,又面向存储.但是现在, Unicode 只是一个字符集,它定义了某个具体字符对应的码位 (Code Point)
一开始unicode是集标准与编码形式于一身的,既面向标准,又面向存储。那时候还没有互联网,大家都是用电脑存储东西进行单机操作,或者说互联网应用还很稀少。所以那时候unicode得不到推广,只是理论上有这么一套东西存在。unicode规定,第65538的字符存储起来,就要三个字节了,因为2个字节,最大排序是65536,所以65538那个编号的字符,占用三个字节,但是这三个字节解析起来很容易出错,所以unicode这时候根本没人用他,只是有这套标准,而没应用。然后后来国际标准组织制定出来了ucs-2标准,但是ucs-2还是面向存储的,规定一个字符必须用2个字节存储,对于大于2个字节的,又制定了ucs-4标准,规定一个字符全都用4个字节存储。后来互联网火了,国际标准组织又搞出了utf-8/utf-16/utf-32,这三个编码方案主要是面向传输的,当然也是一种存储方案,这时候,unicode才被全世界所应用。
UTF-8 是编码规则
UTF 即 Unicode Transformation Formats .UTF 的作用是对 字符/Code Point 编码和解码,使其可以 以二进制形式进行存储或传输.
至于一个字符占多少个字节,在不同的 UTF 规则中是不同的.
在UTF-8中,0-127号的字符用1个字节来表示,使用和US-ASCII相同的编码。这意味着1980年代写的文档用UTF-8打开一点问题都没有。只有128号及以上的字符才用2个,3个或者4个字节来表示。因此,UTF-8被称作可变长度编码。
通过一个特定的编码规则,可以将 一个Code Point 编码为 一个UTF-8规则下的二进制数.反之可以将 一个UTF-8规则下的二进制数 解码为 一个Code Point.
UTF-8的编码解码规则
U+ 0000 ~ U+ 007F: 0XXXXXXX
U+ 0080 ~ U+ 07FF: 110XXXXX 10XXXXXX
U+ 0800 ~ U+ FFFF: 1110XXXX 10XXXXXX 10XXXXXX
U+10000 ~ U+1FFFF: 11110XXX 10XXXXXX 10XXXXXX 10XXXXXX
作者:邱昊宇
链接:https://www.zhihu.com/question/23374078/answer/24385963
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
U+开头的即 Code Point,通过判断 某个具体字符的 Code Point 所在的范围,决定这个字符以多少个字节进行编码解码.
编码后的相同字节数的二进制数,它们每个字节的前缀都是有固定值的(个人认为这和哈夫曼编码有点类似的).计算机读取到前缀,即可知道这个字符占多少个字节.
总结
Unicode 是一个字符集,包含了非常多的不同国家的字符.
而对 Unicode 进行编码解码的规则有许多,如:UTF-8,UTF-16.
使用 UTF-8 这种编码规则,是为了节省存储字符值的空间.