Javas char是16位,但Unicode有更多的字符--Java是如何处理的?
答案 0 :(得分:13)
http://en.wikipedia.org/wiki/UTF-16
在计算中,UTF-16(16位 UCS / Unicode转换格式)是 可变长度字符编码 对于Unicode,能够编码 整个Unicode保留节目。该 编码表单将每个字符映射到a 16位字序列。人物 被称为代码点和 16位字称为代码单元。 对于Basic中的字符 由此产生的多语言平面(BMP) 编码是一个16位字。对于 在其他平面上的人物, 编码将导致一对 16位字,一起叫做a 代理对。所有可能的代码 点从U + 0000到U + 10FFFF, 代理代码点除外 U + D800-U + DFFF(不是 字符),由唯一映射 UTF-16无论代码点如何 当前或未来的角色分配 或者使用。
答案 1 :(得分:8)
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);
答案 2 :(得分:3)
Java对字符串使用UTF-16 - 基本上意味着字符是可变宽度。它们中的大多数适合16位,但基本多语言窗格之外的那些占用32位。它与UTF-8方案非常相似。