如何在Java中将字节数组转换为String?

如何在不转换的情况下将bytes数组转换为String

我试过了:

  String doc=new String( bytes); 

但doc文件与字节不同(字节是二进制信息 )。 例如:

  String doc=new String( bytes); byte[] bytes2=doc.getBytes(); 

bytesbytes2是不同的。

PS:UTF-8不起作用,因为它转换了不同值的一些字节。 我测试过它不起作用。

PS2:不,我不想要BASE64

您需要指定所需的编码,例如UTF-8

 String doc = .... byte[] bytes = doc.getBytes("UTF-8"); String doc2 = new String(bytes, "UTF-8"); 

docdoc2将是相同的。

要解码byte[]您需要知道使用了什么编码来确保它能正确解码。

这是将字节数组转换为String并返回的一种方法:

 String doc=new String(bytes, "ISO-8859-1"); byte[] bytes2=doc.getBytes("ISO-8859-1"); 

String是一个字符序列,因此您必须以某种方式将字节编码为字符。 ISO-8859-1编码为每个字节映射一个唯一的字符,因此可以安全地将其用于转换。 请注意,其他编码(如UTF-8在这种意义上并不安全,因为有些字节序列不会映射到这些编码中的有效字符串。

byte []和String之间的“正确转换”是明确说明要使用的编码。 如果以byte []开头并且实际上不包含文本数据,则没有“正确的转换”。 字符串用于文本,byte []用于二进制数据,唯一真正明智的做法是避免在它们之间进行转换,除非你绝对不得不这样做。

如果你真的必须使用String来保存二进制数据,那么最安全的方法是使用Base64编码。

来自Michael Borgwardt的消息来源