在java中解码String和byte之间的编码

时间:2010-04-14 05:51:17

标签: java

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]

为什么???

3 个答案:

答案 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的合法值。没有理由为什么你在做什么应该工作。因此,不要这样做。