如何在Java中将字节数组转换为String?
如何在不转换的情况下将bytes
数组转换为String
?
我试过了:
String doc=new String( bytes);
但doc文件与字节不同(字节是二进制信息 )。 例如:
String doc=new String( bytes); byte[] bytes2=doc.getBytes();
bytes
和bytes2
是不同的。
PS:UTF-8不起作用,因为它转换了不同值的一些字节。 我测试过它不起作用。
PS2:不,我不想要BASE64
。
您需要指定所需的编码,例如UTF-8
String doc = .... byte[] bytes = doc.getBytes("UTF-8"); String doc2 = new String(bytes, "UTF-8");
doc
和doc2
将是相同的。
要解码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的消息来源