我有一个关于字节数组转换为String的问题,如下面的代码:
public static void main(String[] args) {
System.out.println("--->" + new String(new byte[5]) + "<---");
}
在windows os结果中:
---> <---
在mac os结果中:
--->��������������������<---
为什么呢?每个人都有问题吗?帮助...
答案 0 :(得分:7)
您正在使用一个充满\0
个字节的字节数组。
如何将其转换为字符取决于您使用的字符编码。在您的情况下,您没有指定字符编码,因此它是您的操作系统上的默认值,您可以预期在不同的操作系统上会有所不同。
简单的答案是,不要忘记这一点并指定你想要的字符编码。
System.out.println("--->" + new String(new byte[5], "UTF-8") + "<---");
注意:您还有另一个问题,即不同机器上的字体会有所不同,但您无法在Java程序中控制控制台字体。
答案 1 :(得分:2)
从字节数组创建字符串时,字节值(0-255)将转换为UTF-16字符(请参阅java.lang.String的javadoc)。如何完成此转换取决于字节值的解释方式。例如:多个字节可以构成String中的单个字符。如果未指定要使用的字符编码,则使用默认编码。这可能因平台而异。请参阅this Oracle tutorial about byte encodings and Strings。
要使用UTF-8(Java应用程序的常见选项)创建String,您可以这样做:
byte[] bytes = new byte[5];
// TODO: fill array with values
String utf8 = new String(bytes, java.nio.charset.StandardCharsets.UTF_8);
(使用自Java 7以来可用的java.nio.charset.StandardCharsets