也就是说,BMP中每一个码点的值,必然对应于一个16位码元的值,因为BMP中的码点总数等于2^16=65536个,而16位码元能表示的值也等于2^16=65536个。 这样一来,就产生了冲突:某个UTF-16码元到底是用来表示BMP字符的码元,还是用来表示SP字符的BMP代理对中的代理码元? 因此,为避免冲突,这些被用作“代理”的任意一...
上为UTF-16 编码的介绍,红字部分强调它是一个变长编码;但实际上很多对编码有理解的人也都以为它是固定长度编码。这个错误的认知在日常编程中似乎不会有什么问题,因为常用中文字符都可以用 1 个 16 位长的码元表示。但是,中文有近 8 万个字符,而 1 个 16 位长的码元最大值仅是 65535(0xffff),所以超过一半...
UTF-16(以及后面要讲的 UTF-8)也是采用类似标识位的方式解决问题的:每个码元的高 n 位作为标识位,说明该码元是单独表示一个字符还是和另一个码元一起表示字符,因而改进后的 UTF-16 码元表示类似xxxxyyyyyyyyyyyy,其中 x 表示标识位,y 表示实际值,程序根据一系列的 x 的值决定如何处理该码元。 Unicode 最大编...
在UTF-16编码方式中,被合起来称为“代理对”的这两个16位码元就其中的任一单个码元而言,其实就直接对应于基本平面BMP中的某一个码点(即BMP中每一个码点的值必然对应于一个16位码元的值,因为基本平面中的码点总数为2^16=65536个,而16位码元能表示的值也等于2^16=65536个)。
在UTF-16编码方式中,被合起来称为“代理对”的这两个16位码元就其中的任一单个码元而言,其实就直接对应于基本平面BMP中的某一个码点(即BMP中每一个码点的值必然对应于一个16位码元的值,因为基本平面中的码点总数为2^16=65536个,而16位码元能表示的值也等于2^16=65536个)。
UTF-32 是最好理解的一个了。UTF-32 也就是说它的码元是 32 位,每 32 位去读一下码点,而码点是 Unicode 给字符的编码,前面也说了,最长才 21 位,因此每一个 UTF-32 值都可以直接表示对应的码点。 什么是编码空间呢?前面说了 Unicode ,它是 21 位的。这 21 位提供了 1,114,112 个码点,编码空...
UTF-16也是一种变长编码,对于一个Unicode字符被编码成1至2个码元,每个码元为16位。 基本多语言平面(码位范围U+0000-U+FFFF) 在基本多语言平面内的码位UTF-16编码使用1个码元且其值与Unicode是相等的(不需要转换)。举例如下 辅助平面(码位范围U+10000-U+10FFFF) ...
2、UTF-16:把Unicode字符集的抽象码位映射为16位长的整数(即码元)的序列,用于数据存储或传递。二、编码规则不同 1、UTF-8:如果只有一个字节则其最高二进制位为0;如果是多字节,其第一个字节从最高位开始,连续的二进制位值为1的个数决定了其编码的字节数,其余各字节均以10开头。2、UTF-...
最常用的字符都包含在BMP中,用2个字节表示。辅助平面中的码位,在UTF-16中被编码为一对16比特长的码元,称作代理对(surrogate pair),具体方法是: 将码位减去0×10000,得到的值的范围为20比特长的0~0xFFFFF。 高位的10比特的值(值的范围为0~0x3FF)被加上0xD800得到第一个码元或称作高位代理(high surrogate)...