我想在Java中表示一個Unicode字符。哪一個適合這個的基元或類?我應該如何在Java中表示一個unicode字符?
請注意,我希望能夠存儲任何Unicode字符,這可能對於2字節太大的char
。
我想在Java中表示一個Unicode字符。哪一個適合這個的基元或類?我應該如何在Java中表示一個unicode字符?
請注意,我希望能夠存儲任何Unicode字符,這可能對於2字節太大的char
。
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
取決於字符的定義:
如果指的是一個單個Unicode代碼點 ,使用int
,它可以保存從U + 0000到U + 1FFFFF的每個值。
但是,在某些情況下,顯示爲一個字符佔用多個代碼點。這在表情符號中尤爲常見,例如。
"+++"
如果我用加號代替零寬度加入者(U + 200D)。要存儲那些最邏輯的方式是使用String
。
你可以在**#EmojiCodeSheet ** [這裏](https://github.com/shanraisshan/EmojiCodeSheet)中找到字符串/ int格式的所有表情符號列表, – shanraisshan
您可以使用'char' – prasanth
'char ch ='\ u1111';' –
@prasanth:'char'不能包含所有Unicode字符。 'char'基本上對應於一個UTF-16編碼單元。 –