3

我正在尝试将字节 [] 格式的生成盐值转换为字符串。但每次它转换为特殊字符。

我使用以下方式将 byte[] 转换为 String :

byte[] salt = new byte[] { 50, 111, 8, 53, 86, 35, -19, -47 };
String saltString = new String(salt,"UTF-8");
System.out.println(saltString);

但是输出就像??@?

4

2 回答 2

4

您可以使用 base64 编码进行转换。为此,您可以使用javax.xml.bind.DatatypeConverter.printBase64Binary方法

例如:

    byte[] salt = new byte[] { 50, 111, 8, 53, 86, 35, -19, -47 };
    System.out.println(DatatypeConverter.printBase64Binary(salt));

我也想添加这个答案

byte[] 和 String 之间的“正确转换”是明确说明您要使用的编码。如果您以 byte[] 开头并且它实际上不包含文本数据,则没有“正确的转换”。字符串用于文本,byte[] 用于二进制数据,唯一真正明智的做法是避免在它们之间进行转换,除非绝对必要。

于 2013-05-31T09:42:46.023 回答
1

您可以先将其转换为base64并从中获取字符串。

byte[] salt = new byte[] { 50, 111, 8, 53, 86, 35, -19, -47 };
String encoded = new BASE64Encoder().encode(salt); 
System.out.print(encoded);
于 2013-05-31T09:24:12.520 回答