是因为UTF-16设计的这个代理对编码机制,将码元的有效位数从原来的16位,扩展到了20位(32位中减去两个代理定数前缀,也就是减去12位代理附加位,剩下的有效位数为20位),其中前4位刚好可以表示16个增补平面的编号之一(因为2^4=16),后16位刚好可以表示一个增补平面中的所有码点(因为2^16=65536)。
UTF-16编码方式及其代理机制是在Unicode 2.0中为支持字符编号超过U+FFFF的增补字符而引入的,于是从此就由UCS-2的等宽(16位)码元序列编码方式(如前文所述,从现代字符编码模型的角度来看的话,UCS-2更多是的编号字符集CCS中的概念,但考虑到其历史原因,称之为字符编码方式CEF亦未尝不可,下同,不再赘述),变成了UTF-...
在UTF-16编码方式中,被合起来称为”代理对“的这两个16位码元就其中的任一单个码元而言,其实就直接对应于基本平面BMP中的某一个码点(即BMP中每一个码点的值必然对应于一个16位码元的值,因为基本平面中的码点总数为2^16=65536个,而16位码元能表示的值也等于2^16=65536个)。 这样一来,就产生了冲突:某个...
UTF-16的这种“代理对”编码规则保证了文本处理程序能够正确地访问和处理包括了基本平面和增补平面在内的全部UTF-16码元序列,并消除了基本平面字符和增补平面字符之间发生冲突的可能性。 因为引导代理和尾随代理码元被各自规定在一个特定范围内取值,所以很简单的一个原则就是:凡是在代理编码范围内的码元就是“代理”增...
UTF-16(16-bit Unicode Transformation Format)是 Unicode 字符编码五层次模型的第三层:字符编码表(Character Encoding Form,也称为 storage format)的一种实现方式。即把 Unicode 字符集的抽象码位映射为16位长的整数(即码元)的序列,用于数据存储或传递。Unicode 字符的码位,需要 1个或者2个16位长的码元 ...
UTF-16的这种“代理对”编码规则保证了文本处理程序能够正确地访问和处理包括了基本平面和增补平面在内的全部UTF-16码元序列,并消除了基本平面字符和增补平面字符之间发生冲突的可能性。 因为引导代理和尾随代理码元被各自规定在一个特定范围内取值,所以很简单的一个原则就是:凡是在代理编码范围内的码元就是“代理”增...
因此,增补平面的第一个码点的编号0x10000其UTF-16编码就是0xD800 0xDC00(即0x10000经UTF-16编码后的码元序列为0xD800 0xDC00),其余类推。展现为二进制形式后如下: ===代理码元1=== ===代理码元2=== 1101 10pp ppxx xxxx 1101 11xx xxxx xxxx 其中代理码元1...
因此,增补平面的第一个码点的编号0x10000其UTF-16编码就是0xD800 0xDC00(即0x10000经UTF-16编码后的码元序列为0xD800 0xDC00),其余类推。展现为二进制形式后如下: ===代理码元1=== ===代理码元2=== 1101 10pp ppxx xxxx 1101 11xx xxxx xxxx 其中代理...
因此,增补平面的第一个码点的编号0x10000其UTF-16编码就是0xD800 0xDC00(即0x10000经UTF-16编码后的码元序列为0xD800 0xDC00),其余类推。展现为二进制形式后如下: ===代理码元1=== ===代理码元2=== 1101 10pp ppxx xxxx 1101 11xx xxxx xxxx 其中代理码元1...