2017-04-05 36 views
1

我想在Java中表示一個Unicode字符。哪一個適合這個的基元或類?我應該如何在Java中表示一個unicode字符?

請注意,我希望能夠存儲任何Unicode字符,這可能對於2字節太大的char

+1

您可以使用'char' – prasanth

+0

'char ch ='\ u1111';' –

+2

@prasanth:'char'不能包含所有Unicode字符。 'char'基本上對應於一個UTF-16編碼單元。 –

回答

9

char確實是16位,a char corresponds to a UTF-16 code unit。不適合單個UTF-16編碼單元的字符(例如Emojis)需要兩個char s。

如果因爲某些原因需要單獨存儲它們,則可以使用int。對於Unicode中當前允許的所有0x10FFFF代碼點,它有足夠的空間(然後有一些)。這就是JDK使用的,例如Character.codePointAt(CharSequence seq, int index)String(int[] codePoints, int offset, int count)。其輸出

String s = ""; 
int emoji = Character.codePointAt(s, 0); 
String unumber = "U+" + Integer.toHexString(emoji).toUpperCase(); 
System.out.println(s + " is code point " + unumber); 
String s2 = new String(new int[] { emoji }, 0, 1); 
System.out.println("Code point " + unumber + " converted back to string: " + s2); 
System.out.println("Successful round-trip? " + s.equals(s2)); 

無端轉換示例(live on ideone

 
    is code point U+1F602 
Code point U+1F602 converted back to string: 
Successful round-trip? true 
1

取決於字符的定義:

如果指的是一個單個Unicode代碼點 ,使用int,它可以保存從U + 0000到U + 1FFFFF的每個值。

但是,在某些情況下,顯示爲一個字符佔用多個代碼點。這在表情符號中尤爲常見,例如。

要存儲那些最邏輯的方式是使用String

+0

你可以在**#EmojiCodeSheet ** [這裏](https://github.com/shanraisshan/EmojiCodeSheet)中找到字符串/ int格式的所有表情符號列表, – shanraisshan

相關問題