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

sev*_*ven 0 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")));
Run Code Online (Sandbox Code Playgroud)

输出:

[1, -17, -65, -67]
[1, -1]
Run Code Online (Sandbox Code Playgroud)

为什么???

Jon*_*eet 6

你的字节数组不是一个有效的UTF-8编码字符串...所以你得到的字符串

new String(bytes, "UTF-8")
Run Code Online (Sandbox Code Playgroud)

包含U + 0001(用于第一个字节)和U + FFFD用于表示第二个字节中的错误数据.当使用UTF-8编码该字符串时,您将获得显示的字节模式.

基本上,您不应该尝试将任意二进制数据解释为使用特定编码进行编码.如果要将任意二进制数据表示为字符串,请使用类似base64的内容.