windows java字节数组转换为字符串,但不同的操作系统会产生不同的结果
我对字节数组转换为字符串有一个问题,代码如下:
public static void main(String[] args) {
System.out.println("--->" + new String(new byte[5]) + "<---");
}
在windows操作系统中,结果:
---> <---
在mac os中,结果:
--->��������������������<---
为什么?每个人都有问题吗?救命啊
# 1 楼答案
从字节数组创建字符串时,字节值(0-255)将转换为UTF-16字符(参见java.lang.String的javadoc)。转换的方式取决于字节值的解释方式。例如:多个字节可以组成字符串中的单个字符。如果未指定要使用的字符编码,则使用默认编码。这可能因平台而异。见this Oracle tutorial about byte encodings and Strings
要使用UTF-8(Java应用程序的常见选择)创建字符串,可以执行以下操作:
(使用自Java 7以来可用的java.nio.charset.StandardCharsets)
# 2 楼答案
您使用的字节数组充满了
\0
nul字节如何将其转换为字符取决于您使用的字符编码。在你的例子中,你没有指定字符编码,所以它是你操作系统上的默认值,你可以预期在不同的操作系统上会有所不同
简单的答案是,不要把这件事留给偶然的机会,指定你想要的字符编码
注意:您还有一个问题,即字体在不同的机器上会有所不同,但您无法从Java程序中控制控制台字体