在java中将字节[]转换为字符串

在java中将字节[]转换为字符串,java,casting,Java,Casting,我正在尝试将byte[]格式的generate salt值转换为String。 但每次它都转换为特殊字符 我使用以下方法将字节[]转换为字符串: byte[] salt = new byte[] { 50, 111, 8, 53, 86, 35, -19, -47 }; String saltString = new String(salt,"UTF-8"); System.out.println(saltString); 但是输出类似于??@您可以首先将其转换为base64并从中获取字符串

我正在尝试将byte[]格式的generate salt值转换为String。 但每次它都转换为特殊字符

我使用以下方法将字节[]转换为字符串:

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

但是输出类似于
??@
您可以首先将其转换为
base64
并从中获取字符串

byte[] salt = new byte[] { 50, 111, 8, 53, 86, 35, -19, -47 };
String encoded = new BASE64Encoder().encode(salt); 
System.out.print(encoded);

可以使用base64编码进行转换。要做到这一点,您可以使用

例如:

    byte[] salt = new byte[] { 50, 111, 8, 53, 86, 35, -19, -47 };
    System.out.println(DatatypeConverter.printBase64Binary(salt));
我还要补充一点

字节[]和字符串之间的“正确转换”是显式的 说明要使用的编码。如果以字节[]开头,则 实际上不包含文本数据,没有“适当的转换”。 字符串表示文本,字节[]表示二进制数据,并且 明智的做法是避免在它们之间转换,除非 绝对必须


salt通常是二进制数据。是什么让您如此确定它应该编码字符串?您正在寻找以下内容:
StringBuilder sb=new StringBuilder();对于(字节b:salt){char ch=(char)b;sb.append(ch);}
salt是任意二进制数据,没有有意义的字符串表示。但是,如果您首先对它们进行base64编码,那么它们将完全可打印并表示相同的内容;sysout(新字符串(已解码))但现在它显示字符串值为“ÚŽU”。我遗漏了什么吗?@Patashu感谢您的反馈,添加了样本。@NareshJ您必须对其进行编码,而不是解码,我想您现在已经猜到了:)