什么是Java中的“代理对”?

我正在阅读StringBuffer的文档,特别是reverse()方法。 那个文件提到了关于代理对的一些事情。 在这方面什么是代理对? 什么是代理?

术语“代理对”是指在UTF-16编码scheme中用高代码点编码Unicode字符的手段。

在Unicode字符编码中,字符被映射到0x0和0x10FFFF之间的值。

Java内部使用UTF-16编码scheme来存储Unicode文本string。 在UTF-16中,使用16位(双字节)代码单元。 由于16位只能包含从0x0到0xFFFF的字符范围,因此使用一些额外的复杂性来存储此范围(0x10000到0x10FFFF)以上的值。 这是使用称为代理的代码单元对完成的。

替代码单元有两个范围,分别称为“高代理”和“低代理”,取决于是否允许在两码单元序列的开始或结束。

那些文档说的是,无效的UTF-16string在调用reverse方法后可能会变得有效,因为它们可能是有效string的反转。 代理对(在这里讨论)是UTF-16中的一对16位值,它们编码一个Unicode代码点; 低代名词和高代名词是这种编码的两半。

代理对是指UTF-16编码某些字符的方式,请参见http://en.wikipedia.org/wiki/UTF-16/UCS-2#Code_points_U.2B10000..U.2B10FFFF

代理对是UTF-16中的两个“代码单元”,构成了一个“代码点”。 Java文档指出,这些'代码点'仍然是有效的,他们的'代码单元'正确地sorting,反过来。 它进一步指出,两个不成对的替代码单元可能被颠倒,形成一个有效的替代对。 这意味着如果有不成对的代码单元,那么就有可能反向的反向可能不一样!

但是请注意,文档没有提到任何关于字形的问题 – 这是多个码点的组合。 这意味着e和与之相伴的口音可能仍然会被切换,从而将重音放在e之前。 这意味着如果在e之前还有另一个元音,它可能会得到e上的重音。

哎呀!