簡體   English   中英

將大小為4個字節的Unicode字符分配給char

[英]Assigning a Unicode character with a size of 4 bytes to a char

我試圖將Unicode字符0x10FFFF分配給char ,但失敗並出現錯誤:

 public static void main(String []args){
         char a = 0x10FFFF;
         int b=a;
        System.out.println("b="+b+", but a="+a);
 }

錯誤:

HelloWorld.java:4: error: possible loss of precision
         char a=   0x10FFFF;
                   ^
  required: char
  found:    int
1 error

現在我知道char的上限是65,535,因為它使用16位存儲。

這是否意味着不應使用char來表示Unicode字符? 在處理Unicode字符時是否應該始終使用int
那么char類型有什么好處?

這是否意味着不應使用char來表示Unicode字符?

不, 基本多語言平面中的Unicode字符仍然可以由char表示。

在處理Unicode字符時是否應該始終使用int?

不,請使用帶有代理對String 例如,使用"\?\?"表示Unicode字符“ CHRISTMAS TREE”(U + 1F384)。 這里有一個很好的代理對計算器: http : //www.russellcottrell.com/greek/utilities/Sur​​rogatePairCalculator.htm

那么char類型有什么好處?

它仍然可以代表基本多文種平面的任意字符。

這是Java中的一個已知問題,該問題已在Java教程Unicode部分中解決:

創建Java語言規范時,將接受Unicode標准,並將char原語定義為16位數據類型,其字符的十六進制范圍為0x0000至0xFFFF。

由於16位編碼支持216(65,536)個字符,不足以定義全世界使用的所有字符,因此Unicode標准已擴展為0x10FFFF,它支持超過一百萬個字符。 Java編程語言中字符的定義不能從16位更改為32位,而不會導致數百萬個Java應用程序無法正常運行。 為了更正定義,開發了一種方案來處理無法以16位編碼的字符。

值在16位范圍之外且在0x10000到0x10FFFF范圍內的字符稱為補充字符,並定義為一對char值。

請單擊上面的鏈接以獲取代碼示例和更多信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM