Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java字节数组转换为字符串,但不同的操作系统会产生不同的结果_Java_Windows_Macos_Bytearray - Fatal编程技术网

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

java字节数组转换为字符串,但不同的操作系统会产生不同的结果,java,windows,macos,bytearray,Java,Windows,Macos,Bytearray,我对字节数组转换为字符串有一个问题,代码如下: public static void main(String[] args) { System.out.println("--->" + new String(new byte[5]) + "<---"); } 在windows操作系统中,结果: ---> <--- 在mac os中,结果: --->��������������������<--- 为什么??每个人都有问题吗?帮助…

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

public static void main(String[] args) {

        System.out.println("--->" + new String(new byte[5]) + "<---");
}
在windows操作系统中,结果:

--->    <---
在mac os中,结果:

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

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

您使用的字节数组中包含\0个nul字节

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

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

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

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

从字节数组创建字符串时,字节值0-255将转换为UTF-16字符。请参阅的javadoc。转换的方式取决于字节值的解释方式。例如:多个字节可以组成字符串中的单个字符。如果未指定要使用的字符编码,则使用默认编码。这可能因平台而异。看

要使用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以来可用的选项

您实际期望的是什么?为什么要用未初始化的字节数组构建字符串?因为业务需求,我们必须首先分配20字节数组。我不敢相信业务需求是打印未初始化的字节数组。