18

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

我试过了:

  String doc=new String( bytes);

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

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

bytes并且bytes2是不同的。

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

PS2:不,我不想要BASE64

4

3 回答 3

16

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

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

doc并且doc2将是相同的。

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

于 2013-07-10T15:39:32.383 回答
14

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

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

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

于 2013-07-10T15:39:03.760 回答
1

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

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

来源迈克尔·博格沃特

于 2013-07-10T15:39:04.707 回答