Unicode代码点和java char

时间:2014-09-02 18:43:14

标签: java unicode utf-8

有人问过类似的question。但我没有得到答案。

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

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

现在假设我有一个unicode字符'电',并假设它的代码点类似于U + FFFF1。这个代码点不能存储在2个字节中,因此java会为它分配额外的字节(基于UTF16的字符串)吗?

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

char myChar =  '電'

假设其代码点表示很长并且需要超过2个字节。

myChar会有多少位--16或32

由于

1 个答案:

答案 0 :(得分:3)

Jave使用UTF-16,是的,每个Java char都是16位。来自Java Tutorial - Primitive Data Types

  

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

此外,Character Javadoc说(部分),

  

仅接受char值的方法不支持增补字符。它们将代理范围中的char值视为未定义的字符。例如,Character.isLetter('\ uD840')返回false,即使后面跟着字符串中任何低代理值的特定值也代表一个字母。

     

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

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