跳到主要内容

JEP 226:UTF-8 属性资源包

概括

为应用程序定义一种方法来指定以 UTF-8 编码的属性文件,并扩展 ResourceBundle API 来加载它们。

动机

该平台长期以来一直提供基于 ISO-8859-1 的属性文件格式,并为无法用该编码表示的字符提供转义机制。标准资源包查找机制支持此格式。正如相关 RFE 中所指出的,这种格式很难使用,因为它需要在其转义形式和可直接编辑的字符编码文本之间进行连续转换。

描述

将 ResourceBundle 类的默认文件编码更改为加载属性文件,从 ISO-8859-1 更改为 UTF-8。通过这样做,应用程序不再需要使用转义机制转换属性文件。现有属性文件很少受到此更改的影响,因为 ISO-8859-1 的 U+0000-U+007F 与 UTF-8 兼容,并且代码点超过 U+00FF 的字符应该已被转义。如果读取 UTF-8 格式的属性文件时发生异常(MalformedInputException 或 UnmappableCharacterException),则会从头开始再次读取属性文件,恢复为使用 ISO-8859-1 编码。为了在极少数情况下可以将 ISO-8859-1 属性文件识别为有效的 UTF-8 文件,此 JEP 提供了一种方法来显式指定 ISO-8859-1 或 UTF-8 编码,方法是设置系统属性“java.util.PropertyResourceBundle.encoding”。