在java中将字节[]转换为字符串
我正在尝试将byte[]格式的generate salt值转换为String。 但每次它都转换为特殊字符 我使用以下方法将字节[]转换为字符串:在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[] 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您必须对其进行编码,而不是解码,我想您现在已经猜到了:)