【Java 18】使用 UTF-8 作为默认的字符集
在 Java 中,把字节数据转换成字符时,需要指定字符集。如果没有显式指定字符集,在 Java 18 之前,默认使用的字符集由 JVM 根据运行的底层平台来确定。这可能产生兼容性问题。在一台机器上使用默认字符集写入的文件,在另一台机器上使用默认字符集可能无法读取。因为这两台机器的默认字符集不相同。
为了解决兼容性问题,需要显式地指定字符集。显式指定字符集使用的是不同的 API。在编写代码时很容易遗漏对字符集的指定。
在 Java 18 中,默认的字符集被设置为 UTF-8。这样就确保了使用默认字符集的代码,在不同的平台上可以有一致的行为。
在下面的代码中,FileWriter
用来写入文件。Java 18 默认使用字符集 UTF-8。
public class SimpleFileWriter {
public static void main(String[] args) throws IOException {
try (FileWriter fileWriter = new FileWriter("test.txt")) {
fileWriter.write("你好,世界!");
}
}
}
在 Java 18 中,如果仍然想使用平台相关的默认字符集,也就是保留 Java 18 之前的行为,可以添加启动参数 -Dfile.encoding=COMPAT
。
在 Java 18 之前,字符集名称 default
实际上是 US-ASCII 的别名。在默认字符集变成了 UTF-8 之后
名称 default
变得不再适用。因此,名称 default
已经被删除。调用 Charset.forName("default")
会抛出 UnsupportedCharsetException
异常。