Java18新改动:默认UTF-8
上个月,Oracle官方网站发布了JDK18/Java18的官方版本。据报道,Java18在性能、稳定性和安全性方面得到了全面提高,包括平台的9项JDK增强(JEP),大大提高了开发人员的工作效率。
Java18新改动:默认UTF-8
已知JDK18版本主要集中在9个增强功能上,其中之一是将UTF-8设置为标准JavaAPI的默认字符集。在JDK17和早期版本中,默认字符集只能在Java虚拟机运行时确定,因此在实现和处理方面存在一些问题,这取决于不同的操作系统、语言环境等因素。从Java18开始,依赖默认字符集的API将在所有实现、操作系统、语言环境和配置中保持一致。
UTF-8之前默认存在问题。
Javadoc(Javadoc命令用于生成自己的API文档)中有一句话:默认字符集是在虚拟机运行时确定的,通常根据语言环境和底层操作系统使用的字符集来确定。这意味着默认字符集在不同的操作系统中,地理区域和用户偏好之间可能会有很大的差异,也就是说,同一个物理机器上的两个用户甚至可能有不同的默认字符集。
此外,如果我们在构建过程中没有指定任何字符集,那么像java.io.fileWriter或java.io.filerereader这样的旧JDKAPI将使用默认字符集写入操作;在新版本中,像java.nio.file.files这样的新API将默认为UTF-8。
此外,许多开发人员在JVM(Java虚拟机)启动时,依靠不支持的系统属性file.encoding设置默认字符集。虽然有些JVM可能支持它,但这并不能保证其他JVM也支持它。
UTF-8F-8的好处。
Java18将UTF-8作为所有实现、操作系统、语言环境和配置的默认字符集。然后,所有依赖默认字符集的API都将是一致的,而不需要设置file.encoding系统属性,也不需要在创建相应对象时总是指定字符集。我们都知道字符集一致性的重要性,默认情况下,UTF-8将提高我们软件的可靠性和一致性,这是一个非常流行的变化。
还有一些问题。
如果我们想让JDK18和以前的版本一样,那么我们必须用-Dfile.encoding=COMPAT启动JVM。例如,我们有一些源代码不能重新编译,它依赖于不同于UTF-8的默认字符集,所以我们需要这样做。在所有其他情况下,无需设置此属性。但是,请注意,当您使用-Dfile.encoding=COMPAT和java.nio.file.files中的函数,而不定义字符集,但返回到UTF-8时,您将返回到原点-您的应用程序的某些部分将以UTF-8读取/写入文件,而其他部分将使用操作JVM的默认字符集。
在JDK17和之前的版本中,我们都可以写入charset.forname(default),以获得JVM的默认字符集。在JDK18中,银行代码将抛出unsupportedcharsetexception。因此,如果我们的源代码中有这句话,或者我们使用任何包含这句话的库,我们的应用程序将在运行过程中抛出异常。