先看一段代碼:
byte [] b = new byte[]{1,-1,2,-2};
System.out.println(Arrays.toString(new String(b).getBytes()));
輸出:
[1, -17, -65, -67, 2, -17, -65, -67]
解釋:
byte decode to String,String encode to byte 默認用UTF-8 charset.
decode遇到不支持的字符 輸出 char ? , encode ? 就是 -17, -65, -67.
實現細節可見ByteToCharUTF8.java
解決辦法: 使用 ISO8859_1 charset。
教訓: 注意charset的范圍。