Java中的“代理项对”是什么?
我正在阅读 的文档,特别是 reverse() 方法。该文档提到了有关代理项对的内容。在这种情况下,什么是代理项对?什么是低和高代孕?StringBuffer
我正在阅读 的文档,特别是 reverse() 方法。该文档提到了有关代理项对的内容。在这种情况下,什么是代理项对?什么是低和高代孕?StringBuffer
术语“代理项对”是指在 UTF-16 编码方案中对具有高码位的 Unicode 字符进行编码的方法。
在 Unicode 字符编码中,字符映射到介于 0x0 和 0x10FFFF 之间的值。
在内部,Java 使用 UTF-16 编码方案来存储 Unicode 文本的字符串。在 UTF-16 中,使用 16 位(双字节)代码单元。由于 16 位只能包含从 0x0 到 0xFFFF 的字符范围,因此使用一些额外的复杂性来存储此范围以上的值(0x10000到0x10FFFF)。这是使用称为代理项的代码单元对完成的。
代理代码单元位于两个范围内,称为“高代理项”和“低代理项”,具体取决于在两个代码单元序列的开头还是结尾是否允许它们。
早期的Java版本使用16位char数据类型表示Unicode字符。这种设计在当时是有意义的,因为所有Unicode字符的值都小于65,535(0xFFFF),可以用16位表示。但是,后来,Unicode 将最大值增加到 1,114,111(0x10FFFF)。由于 16 位值太小,无法表示 Unicode 版本 3.1 中的所有 Unicode 字符,因此 UTF-32 编码方案采用了 32 位值(称为码位)。但是,为了有效地使用内存,16 位值优先于 32 位值,因此 Unicode 引入了一种新设计,允许继续使用 16 位值。此设计采用 UTF-16 编码方案,将 1,024 个值分配给 16 位高代理项(在 U+D800 到 U+DBFF 范围内),另外 1,024 个值分配给 16 位低代理项(在 U+DC00 到 U+DFFF 范围内)。它使用高代理项,后跟低代理项(代理项对)来表示(1,024 和 1,024 的乘积)1,048,576 (0x100000) 介于 65,536 (0x10000) 和 1,114,111 (0x10FFFF) 之间的值。