2009-12-21 122 views

回答

7

Java字符串是UTF-16(大端),所以Unicode代码点可以是一个或两个字符。在此编码下,Java可使用字符0xD835 0xDD0A(字符串文字"\uD835\uDD0A")表示代码点U + 1D50A(MATHEMATICAL FRAKTUR CAPITAL G)。 Character类提供了用于转换代码点/从代码点转换的方法。

// Unicode code point to char array 
char[] math_fraktur_cap_g = Character.toChars(0x1D50A); 
+0

为什么我们不使用'int'类型' math_fraktur_cap_g'读取非BMP的代理对?如[这里]所述(https://stackoverflow.com/a/13112474/3317808) – overexchange 2017-11-09 06:54:43

13
http://en.wikipedia.org/wiki/UTF-16

在计算中,UTF-16(16位 UCS/Unicode转换格式)是 Unicode的可变长度字符编码 ,能编码 整个Unicode剧目。 编码形式将每个字符映射到一个16位字的序列 。字符 被称为代码点,而16位字被称为代码单元。 对于基本文字 多语言平面(BMP),得到的 编码是一个单一的16位字。对于其他平面中的 字符, 编码将产生一对 16位字,一起称为 替代对。无论代码点是什么,除了替代码点 U + D800-U + DFFF(它们不是 个字符)以外,所有可能的代码 指向UTF-16的唯一地址映射为U + 0000至U + 10FFFF, 当前或未来的人物分配 或使用。

+0

请参阅我以前的答案,以了解如何正确地遍历Java字符串中的所有字符。 http://stackoverflow.com/questions/1527856/how-can-i-iterate-through-the-unicode-codepoints-of-a-java-string/1527891#1527891 – 2009-12-21 18:02:05

3

Java对字符串使用UTF-16 - 基本上意味着字符的宽度是可变的。它们中的大多数适合16位,但基本多语言窗格之外的那些占用32位。这与UTF-8方案非常相似。