我有一个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
答案 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");