我正在阅读 StringBuffer
的文档,特别是 reverse() 方法。该文档提到了有关 代理对 的内容。在这种情况下,代理对是什么?什么是 低 代理和 高 代理?
原文由 Raymond 发布,翻译遵循 CC BY-SA 4.0 许可协议
我正在阅读 StringBuffer
的文档,特别是 reverse() 方法。该文档提到了有关 代理对 的内容。在这种情况下,代理对是什么?什么是 低 代理和 高 代理?
原文由 Raymond 发布,翻译遵循 CC BY-SA 4.0 许可协议
早期的 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) 之间的值。
原文由 ibrahem shabban 发布,翻译遵循 CC BY-SA 3.0 许可协议
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4k 阅读✓ 已解决
3 回答6k 阅读
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
术语“代理对”是指在 UTF-16 编码方案中使用高代码点对 Unicode 字符进行编码的方法。
在 Unicode 字符编码中,字符被映射到 0x0 和 0x10FFFF 之间的值。
在内部,Java 使用 UTF-16 编码方案来存储 Unicode 文本字符串。在 UTF-16 中,使用 16 位(两字节)代码单元。由于 16 位只能包含从 0x0 到 0xFFFF 的字符范围,因此使用一些额外的复杂性来存储超出此范围(0x10000 到 0x10FFFF)的值。这是使用称为代理项的成对代码单元完成的。
代理代码单元位于两个范围内,称为“高代理”和“低代理”,具体取决于它们是否允许出现在双代码单元序列的开头或结尾。