【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 异常。

版权所有 © 2024 灵动代码