Skip to content

JEP 226: UTF-8 Property Resource Bundles | UTF-8 属性资源束

摘要

JEP 226 介绍了一种新的方法来支持 UTF-8 编码的属性资源束。在旧的 Java 版本中,属性资源束默认使用 ISO-8859-1 编码,这限制了非 ASCII 字符的使用。此 JEP 旨在为属性资源束提供对 UTF-8 编码的全面支持。

背景

属性资源束是一种常用的国际化和本地化功能,用于存储本地化字符串等资源。在旧的 Java 版本中,属性资源束使用 ISO-8859-1 编码,这是一种单字节编码,不能表示所有的 Unicode 字符。这导致在国际化应用程序中有时会出现字符乱码或无法正确显示字符的问题。

新特性

JEP 226 引入了几个改进,以支持 UTF-8 编码的属性资源束:

  1. 属性文件格式:新的属性文件格式采用 UTF-8 编码,可以正确地表示 Unicode 字符。现在,开发人员可以在属性文件中自由使用各种语言和字符。

  2. 加载器 API:新的 ClassLoader API 增加了对 UTF-8 编码资源束的支持。开发人员可以使用新的 ResourceBundle.getBundle 重载方法来加载 UTF-8 编码的属性资源束。

  3. 工具:JEP 226 还提供了用于处理 UTF-8 编码属性资源束的工具。native2ascii 工具和 PropertyResourceBundleListResourceBundle 工具类都已更新,以支持 UTF-8 编码资源束的正确处理。

影响

通过引入 UTF-8 编码属性资源束的支持,JEP 226 对于国际化和本地化应用程序开发人员来说是一个重要的改进。它解决了旧版本中的字符乱码和显示问题,并允许更广泛地使用不同语言和字符。

总结

JEP 226 为 Java 引入了对 UTF-8 编码属性资源束的全面支持。通过使用 UTF-8 编码,开发人员可以在属性资源束中使用各种语言和字符,从而更好地支持国际化和本地化应用程序。

摘要

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

动机

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

描述

ResourceBundle 类的默认文件编码更改为从 ISO-8859-1 加载属性文件到 UTF-8。通过这样做,应用程序不再需要使用转义机制转换属性文件。由此更改对现有属性文件的影响很小,因为 ISO-8859-1 的 U+0000-U+007F 与 UTF-8 兼容,并且其代码点超过 U+00FF 的字符应该已经被转义。如果以 UTF-8 读取属性文件时发生异常(如 MalformedInputExceptionUnmappableCharacterException ),则会重新从头读取属性文件,并恢复使用 ISO-8859-1 编码。为了使罕见的 ISO-8859-1 属性文件能够被识别为有效的 UTF-8 文件,默认情况下,该 JEP 提供了一种通过设置系统属性 "java.util.PropertyResourceBundle.encoding" 来明确指定编码(ISO-8859-1 或 UTF-8)的手段。