java字节数组转换为String,但不同的os结果不同

时间:2015-09-01 07:45:51

标签: java windows macos bytearray

我有一个关于字节数组转换为String的问题,如下面的代码:

public static void main(String[] args) {

        System.out.println("--->" + new String(new byte[5]) + "<---");
}

在windows os结果中:

--->    <---

在mac os结果中:

--->��������������������<---

为什么呢?每个人都有问题吗?帮助...

2 个答案:

答案 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