先看一段代码:
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的范围。