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);
}

