有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

windows java字节数组转换为字符串,但不同的操作系统会产生不同的结果

我对字节数组转换为字符串有一个问题,代码如下:

public static void main(String[] args) {

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

在windows操作系统中,结果:

--->    <---

在mac os中,结果:

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

为什么?每个人都有问题吗?救命啊


共 (2) 个答案

  1. # 1 楼答案

    从字节数组创建字符串时,字节值(0-255)将转换为UTF-16字符(参见java.lang.String的javadoc)。转换的方式取决于字节值的解释方式。例如:多个字节可以组成字符串中的单个字符。如果未指定要使用的字符编码,则使用默认编码。这可能因平台而异。见this Oracle tutorial about byte encodings and Strings

    要使用UTF-8(Java应用程序的常见选择)创建字符串,可以执行以下操作:

    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

  2. # 2 楼答案

    您使用的字节数组充满了\0nul字节

    如何将其转换为字符取决于您使用的字符编码。在你的例子中,你没有指定字符编码,所以它是你操作系统上的默认值,你可以预期在不同的操作系统上会有所不同

    简单的答案是,不要把这件事留给偶然的机会,指定你想要的字符编码

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

    注意:您还有一个问题,即字体在不同的机器上会有所不同,但您无法从Java程序中控制控制台字体