java中char的使用注意事項
阿新 • • 發佈:2021-01-19
java內部使用unicode字符集
unicode字符集中的字元超出了2^16個,使用2個位元組(16位)已經不能表示所有的字元了。具體使用幾個位元組表示一個字元與具體的編碼方式有關
utf8使用1-8個位元組表示一個字元
utf16使用2個位元組或者4個位元組表示一個字元
utf32使用4個位元組表示一個字元
java內部使用utf16編碼方式
當字元的碼點在u+0000 - u+FFFF之間,則使用兩個位元組表示一個字元
當字元的碼點在u+FFFF-u+10FFFF之間,則使用4個位元組表示一個字元
utf16編碼方式參照:https://zhuanlan.zhihu.com/p/106379925
java中char型別表示一個程式碼單元(16位),一些輔助字元(4個位元組)則需要兩個2個程式碼單元表示(2個char)。所以在java中字串轉char需要特別注意。
例如以下的問題:
@Test
public void testExtendChar(){
String str = "\uD835\uDD46\uD835\uDD35";
System.out.println("=======");
System.out.println(str);
System.out.println("=======");
for (char c : str.toCharArray()) {
System.out.println(c);
}
System.out.println("=======");
char ch = str.charAt(0);
System.out.println(ch);
}