栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Java 如何通过ResourceBundle在资源属性中使用UTF-8

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java 如何通过ResourceBundle在资源属性中使用UTF-8

ResourceBundle#getBundle()
封面下使用
PropertyResourceBundle
时,
.properties
被指定的文件。默认情况下
Properties#load(InputStream)
,这反过来使用它来加载那些属性文件。根据
javadoc
,默认情况下将其读取为ISO-8859-1。

public void load(InputStream inStream) throws IOException

从输入字节流中读取属性列表(键和元素对)。输入流采用load(Reader)中指定的面向行的简单格式,并假定使用ISO 8859-1字符编码;即每个字节是一个Latin1字符。不在Latin1中的字符以及某些特殊字符使用Java™语言规范第3.3节中定义的Unipre转义在键和元素中表示。

因此,你需要将它们另存为ISO-8859-1。如果你有任何超出ISO-8859-1范围的字符,并且无法使用

uXXXX
,因此不得不将文件另存为UTF-8,那么你需要使用native2ascii工具转换UTF-8保存的属性文件到
ISO-8859-1
保存的属性文件,其中所有未发现的字符都转换为
uXXXX
格式。下面的示例将UTF-8编码的属性文件
text_utf8.properties
转换为有效的
ISO-8859-1
编码的属性文件text.properties。

native2ascii-编码UTF-8 text_utf8.properties text.properties

当使用健全的IDE(例如Eclipse)时,

.properties
在基于Java的项目中创建文件并使用Eclipse自己的编辑器时,这已经自动完成。Eclipse将透明地将超出ISO-8859-1范围的字符转换为
uXXXX
格式。另请参见下面的屏幕截图(请注意底部的“属性”和“源”选项卡,单击以查看大图):

另外,你还可以创建一个自定义ResourceBundle.Control实现,其中你可以使用来将属性文件显式读取为UTF-8 InputStreamReader,这样你就可以将它们另存为UTF-8,而无需麻烦native2ascii。这是一个启动示例:

public class UTF8Control extends Control {    public ResourceBundle newBundle        (String baseName, Locale locale, String format, ClassLoader loader, boolean reload) throws IllegalAccessException, InstantiationException, IOException    {        // The below is a copy of the default implementation.        String bundleName = toBundleName(baseName, locale);        String resourceName = toResourceName(bundleName, "properties");        ResourceBundle bundle = null;        InputStream stream = null;        if (reload) { URL url = loader.getResource(resourceName); if (url != null) {     URLConnection connection = url.openConnection();     if (connection != null) {         connection.setUseCaches(false);         stream = connection.getInputStream();     } }        } else { stream = loader.getResourceAsStream(resourceName);        }        if (stream != null) { try {     // only this line is changed to make it to read properties files as UTF-8.     bundle = new PropertyResourceBundle(new InputStreamReader(stream, "UTF-8")); } finally {     stream.close(); }        }        return bundle;    }}

可以如下使用:

ResourceBundle bundle = ResourceBundle.getBundle("com.example.i18n.text", new UTF8Control());


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/404775.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号