2013-11-23 28 views
0

奇怪的編碼,我發現了一些棘手的地方,不明白爲什麼這是否正是發生。輸出具有相同的字符串長度

爲什麼字符串包含一個字符可以返回不同的字節數組?

代碼:

public class Application { 
    public static void main(String[] args) throws Exception { 

     char ch; 
     ch = 0x0001; 
     System.out.println(Arrays.toString(("" + ch).getBytes("UTF-8"))); 
     ch = 0x0111; 
     System.out.println(Arrays.toString(("" + ch).getBytes("UTF-8"))); 
     ch = 0x1111; 
     System.out.println(Arrays.toString(("" + ch).getBytes("UTF-8"))); 
    } 
} 

輸出將是下一個:

[1]
[-60,-111]
[-31,-124,-111]

爲什麼會發生這種情況?

回答

2

這是UTF-8是如何工作的。 0和127之間的碼點被編碼爲單字節值(以維持ASCII兼容性);上面的代碼點被編碼爲2到6個字節的值。從here採取

截圖。

因此,對於你的例子:

  1. 0x00010b00000001)被編碼爲
    (BIN)00000001 =(DEC)1
  2. 0x01110b00000001 00010001)被編碼爲
    (BIN)11000100 10010001 =(分解)-60 -111
  3. 0x11110b00010001 00010001)被編碼爲
    (bin)11100001 11100001 10010001 =(dec)-31 -124 -111
相關問題