2014-09-02 44 views
1

有人问过类似question。但我真的没有得到答案。Unicode代码点和java字符

,当我说 char myChar = 'k'在java中它会为它保留16位(根据以下Java文档?

http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

现在可以说我有一个Unicode字符“电”,并假定其代码点是像U + FFFF1该代码点无法存储在2个字节,所以才会在java为它分配额外的字节(UTF-16基于字符串)

总之,当我有这样的事情? -

char myChar = '電' 

假设它的代码点表示很长并且需要多于2个字节。

myChar多少位将有 - 16或32

感谢

+0

如果您没有得到答案,请在此澄清。不要发布重复;他们使得更难以找到问题的好答案,当每个克隆独立于其他克隆而存在时,都有自己的答案。 – 2014-09-02 21:37:11

+0

我同意!但在这种情况下,这个问题已经有4年了(已经选择了一个软件),实际上并没有谈论代码点。 – Tintin 2014-09-02 21:43:09

+0

老问题的接受答案始于“Java字符串是UTF-16(大端),所以Unicode代码点可以是一个或两个字符”。如果需要澄清,应该对现有问题的答案作出解释。 – 2014-09-03 04:56:09

回答

3

java的使用UTF-16,并且是每个Java char是16位。从Java Tutorial - Primitive Data Types

炭:的炭data类型是单个16位的Unicode字符。它的最小值为'\ u0000'(或0),最大值为'\ uffff'(或65,535)。

此外,Character的Javadoc说(部分),

只接受一个char值的方法无法支持增补字符。他们将来自代理范围的char值视为未定义的字符。例如,Character.isLetter('\ uD840')将返回false,即使该字符串中任何低代理值后面的该特定值都表示一个字母。

接受int值的方法支持所有Unicode字符,包括补充字符。例如,Character.isLetter(0x2F81A)返回true,因为代码点值代表一个字母(CJK表意文字)。

因此,补充字符(如第二个示例)不表示为单个16位字符。

+0

谢谢!我不知道单个字符变量的补充字符限制。 – Tintin 2014-09-02 20:36:57