爲什麼"\uFFFF"
(顯然是2個字節長)在UTF-8中轉換爲[-17,-65,-65]而不是[-1,-1]?Java:爲什麼「 uFFFF」在UTF-8中轉換爲[-17,-65,-65]?
System.out.println(Arrays.toString("\uFFFF".getBytes(StandardCharsets.UTF_8)));
這是因爲UTF-8在每個字節中只用了大於127的代碼點的6位嗎?
爲什麼"\uFFFF"
(顯然是2個字節長)在UTF-8中轉換爲[-17,-65,-65]而不是[-1,-1]?Java:爲什麼「 uFFFF」在UTF-8中轉換爲[-17,-65,-65]?
System.out.println(Arrays.toString("\uFFFF".getBytes(StandardCharsets.UTF_8)));
這是因爲UTF-8在每個字節中只用了大於127的代碼點的6位嗎?
UTF-8使用不同數量的字節,具體取決於表示的字符。第一個字節使用7位ASCII約定來實現向後兼容。其他字符(如中文標誌)最多可佔用4個字節。
正如維基百科中的鏈接文章所述,您引用的字符位於3個字節值的範圍內。
0xFFFF
具有11111111 11111111
的位模式。根據UTF-8規則分割比特,模式變爲1111 111111 111111
。現在添加UTF-8的前綴位,模式變爲*1110*1111 *10*111111 *10*111111
,這是0xEF 0xBF 0xBF
,又名239 191 191
,又名-17 -65 -65
,採用二進制補碼格式(這是Java用於簽名值--Java沒有無符號數據類型)。
http://en.wikipedia.org/wiki/UTF-8 – axtavt