我有一个长度为 17 个字节的 byte[] 类型的字节数组,我想将其转换为字符串,并希望将此字符串用于另一次比较,但我得到的输出不是要验证的格式,我正在使用下面的方法进行转换。我想输出为易于验证的字符串,并给出相同的字符串进行比较。
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
它是什么编码?您应该明确定义它:
new String(byteArray, Charset.forName("UTF-32")); //or whichever you use
否则结果是不可预测的(从String.String(byte[])构造函数 JavaDoc):
通过使用平台的默认字符集解码指定的字节数组来构造一个新的 String
顺便说一句,我刚刚尝试过 UTF-8、UTF-16 和 UTF-32 - 都会产生虚假结果。长系列的0
让我相信这实际上不是文本。您从哪里获得这些数据?
更新:我已经尝试过all我的机器上可用的字符集:
for (Map.Entry<String, Charset> entry : Charset.availableCharsets().entrySet())
{
final String value = new String(byteArray, entry.getValue());
System.out.println(entry.getKey() + ": " + value);
}
并且没有编码产生任何接近人类可读文本的内容...您的输入不是文本。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)