【问题标题】:How to convert array of byte to String in Java? [duplicate]如何在Java中将字节数组转换为字符串? [复制]
【发布时间】:2013-07-08 15:14:39
【问题描述】:

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

我试过了:

  String doc=new String( bytes);

但是doc文件和字节不一样(字节是二进制信息)。例如:

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

bytesbytes2 不同。

PS:UTF-8 不起作用,因为它将某些字节转换为不同的值。我测试了,还是不行。

PS2:不,我不想要BASE64

【问题讨论】:

  • 你必须使用正确的编码
  • @TheNewIdiot 该帖子中的答案没有解决任何问题。我希望进行字节到字节的转换,答案是“转换它或破坏”。 Java怎么可能做不到呢?
  • Java 对二进制数据(字节)和文本(字符串)做了很好的区分。对于文本,他们在内部选择了 Unicode,因此涵盖了所有语言。尽管您可以使用 ISO-8559-1 之类的编码将字节原样转换为字符串,反之亦然,但这些字符串可能具有二进制 0 之类的伪影。
  • 您几乎肯定确实想要 Base64,这是获得可逆字节到字符串编码的唯一方法。

标签: java arrays string


【解决方案1】:

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

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

docdoc2 将是相同的。

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 这在 Java 中有效,因为即使是二进制 0(C 字符串终止符)也很好。
    • 对我帮助很大!否则,我会一直在努力处理 byte[]!
    • 关于ISO-8859-1 编码的好提示。
    【解决方案3】:

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

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

    Source迈克尔·博格沃特

    【讨论】:

    • 如果字符串只是一个表示怎么办?在转换回字节数组时,我们使用正确的转换方法?
    猜你喜欢
    • 2012-04-07
    • 2016-07-09
    • 2012-09-02
    • 1970-01-01
    • 2012-07-18
    • 1970-01-01
    • 1970-01-01
    • 2016-06-03
    • 2011-08-06
    相关资源
    最近更新 更多