2014-09-02 83 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