将byte []转换为字符串

时间:2012-02-16 10:47:07

标签: java

我有一个byte []类型的bytearray,长度为17个字节,我想将其转换为字符串,并希望为另一个比较提供此字符串,但我得到的输出不是格式验证,我我使用下面的方法进行转换。我希望输出为易于验证的字符串,并提供相同的字符串进行比较。

    byte[] byteArray = new byte[] {0,127,-1,-2,-54,123,12,110,89,0,0,0,0,0,0,0,0};
    String value = new String(byteArray);
    System.out.println(value);

输出: {nY

5 个答案:

答案 0 :(得分:8)

它是什么编码?您应该明确定义它:

new String(byteArray, Charset.forName("UTF-32"));  //or whichever you use

否则结果是不可预测的(来自String.String(byte[])构造函数JavaDoc):

  

使用平台的默认字符集

解码指定的字节数组,构造一个新的String

BTW我刚刚尝试过使用UTF-8,UTF-16和UTF-32 - 都会产生虚假结果。 0的长篇系列让我相信这实际上并不是一个文本。你从哪里得到这些数据?

更新:我尝试使用我的机器上可用的所有字符集:

for (Map.Entry<String, Charset> entry : Charset.availableCharsets().entrySet())
{
    final String value = new String(byteArray, entry.getValue());
    System.out.println(entry.getKey() + ": " + value);
}

并且没有编码产生任何接近人类可读文本的内容......您的输入不是文本。

答案 1 :(得分:5)

使用如下:

byte[] byteArray = new byte[] {0,127,-1,-2,-54,123,12,110,89,0,0,0,0,0,0,0,0};
String value = Arrays.toString(byteArray);
System.out.println(value);

您的输出将是

[0,127,-1,-2,-54,123,12,110,89,0,0,0,0,0,0,0,0]

答案 2 :(得分:4)

实际编码的文字?如果是,请指定编码。

但是,您获得的数据并非看起来,就像它实际上是文本一样。它看起来像任意二进制数据给我。如果它不是真正的文本,我建议将其转换为hex或base64,具体取决于要求。你可以使用一个很好的public domain base64 encoder

String text = Base64.encodeBytes(byteArray);

解码:

byte[] data = Base64.decode(text):

答案 3 :(得分:1)

不是100%肯定我是否帮助你。这是你想要的吗?

String s = null;
StringBuffer buf = new StringBuffer("");
byte[] byteArray = new byte[] {0,127,-1,-2,-54,123,12,110,89,0,0,0,0,0,0,0,0};
for(byte b : byteArray) {
  s = String.valueOf(b);
  buf.append(s + ",");
}
String value = new String(buf);
System.out.println(value);

答案 4 :(得分:0)

也许你应该指定一个字符集:

String value = new String(byteArray, "UTF-8");