byte[] bytes = new byte[] { 1, -1 };
System.out.println(Arrays.toString(new String(bytes, "UTF-8").getBytes("UTF-8")));
System.out.println(Arrays.toString(new String(bytes, "ISO-8859-1").getBytes("ISO-8859-1")));
输出:
[1, -17, -65, -67]
[1, -1]
为什么???
答案 0 :(得分:6)
您的字节数组不是有效的UTF-8编码字符串...所以您从
获取字符串new String(bytes, "UTF-8")
包含U + 0001(第一个字节)和U + FFFD表示第二个字节中的错误数据。当使用UTF-8编码该字符串时,您将获得显示的字节模式。
基本上,您不应该尝试将任意二进制数据解释为使用特定编码进行编码。如果要将任意二进制数据表示为字符串,请使用类似base64的内容。
答案 1 :(得分:2)
-1不是有效的UTF-8编码字符。 [-17,-65,-67]很可能是被取代的replacement character的字节表示。
答案 2 :(得分:0)
String不是二进制数据的容器。它是char的容器。 -1不是char的合法值。没有理由为什么你在做什么应该工作。因此,不要这样做。