Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java中字符串和字节之间的解码编码_Java - Fatal编程技术网

java中字符串和字节之间的解码编码

java中字符串和字节之间的解码编码,java,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"))); 为什么?您的字节数组不是有效的UTF-8编码字符串。。。所以你从

输出:

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")));

为什么?

您的字节数组不是有效的UTF-8编码字符串。。。所以你从

[1, -17, -65, -67]
[1, -1]
包含U+0001(第一个字节)和U+FFFD,以表示第二个字节中的错误数据。当使用UTF-8对该字符串进行编码时,将显示字节模式


基本上,您不应该试图解释任意二进制数据,就好像它是以特定的编码方式编码的一样。如果要将任意二进制数据表示为字符串,请使用base64之类的内容。

-1不是有效的UTF-8编码字符。[-17,-65,-67]很可能是被替换的字符串的字节表示形式。

字符串不是二进制数据的容器。它是一个用于存储字符的容器-1不是字符的合法值。你所做的没有理由会奏效。因此,不要这样做。

谢谢Jon。但我不熟悉base64,base64如何在丢失数据的情况下支持所有字节?@seven:我不确定你的确切意思-但它只将不透明的二进制数据转换为ASCII码,这通常很容易传输。是否可能某些ASCII字母表中未包含的字节无法转换为ASCII码?谢谢。@seven:不,base64的全部意义在于它接受任何一组字节并将其转换为ASCII。这就是它最终变长的原因(每3个字节4个字符)。
new String(bytes, "UTF-8")