任何人都可以建议我如何将字节数组转换为字符串?此方法不起作用:
byte [] my_array=....;
String my_string = new String (my_array);
或
String my_string = my_array.toString();
我想要做的是将签名转换为字符串并将其传递给另一方。但是当我使用上面的方法和方法时,my_string.getBytes()签名会发生变化,然后无法验证。
我的意思是例如当my my_string.getBytes().toString()
时my_string发生了变化
或my_array在(new String(my_array)).getBytes()
感谢。
答案 0 :(得分:4)
(你没有明确说明,但我假设你的字节数组是某种加密签名。)
你在这里犯了两件事:
以可逆形式处理任意二进制数据作为文本的最常用方法是使用base64。有一个公共域base64 Java库here(还有很多其他免费选项):
byte[] signature = ...;
String signatureBase64 = Base64.encode(signature);
// Propagate signatureBase64 to the other side, then...
byte[] signature = Base64.decode(signatureBase64);
答案 1 :(得分:1)
new String()
和getBytes()
隐式使用平台默认编码并重载以允许您指定编码(几乎总是应该完成)。显然,您的平台默认编码不能代表阵列中的所有字节值。
但是想要将字节转换为String并且返回几乎总是错误的做法。这个“签名”究竟包含什么,以及你认为必须将它转换为String的“另一面”是什么?
答案 2 :(得分:0)
您必须将字节数组编码为Base64.您还可以使用javax.xml.bind.DatatypeConverter的方法 - printBase64Binary()
和parseBase64Binary()
来编码或解码Base64。