赞
踩
当你在Java应用中遇到从ValidationMessages.properties
等资源文件中读取的国际化信息出现乱码的问题时,通常是字符编码设置不匹配导致的。以下是几种可能的解决办法:
首先,确保你的ValidationMessages.properties
文件是使用正确的编码(如UTF-8)保存的。许多文本编辑器允许你选择文件的编码方式。如果使用的是IDE(如IntelliJ IDEA或Eclipse),在保存文件时应指定为UTF-8无BOM格式。
Java的ResourceBundle
类默认使用ISO-8859-1来加载属性文件。为了支持UTF-8等其他编码,你可以自定义一个ResourceBundle.Control
来指定加载时的字符集。
public class Utf8Control extends ResourceBundle.Control { @Override 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, StandardCharsets.UTF_8)); } finally { stream.close(); } } return bundle; } }
然后,使用这个自定义的Control
来加载资源包:
ResourceBundle bundle = ResourceBundle.getBundle("ValidationMessages", new Utf8Control());
String message = bundle.getString("your.key");
确保你的IDE和构建工具(如Maven或Gradle)在编译和打包过程中也正确处理了字符编码。例如,在Maven的pom.xml
中可以添加如下配置来指定资源文件的编码:
<project>
...
<build>
...
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<encoding>UTF-8</encoding>
</resource>
</resources>
...
</build>
...
</project>
通过上述方法,你应该能够解决从ValidationMessages.properties
等资源文件中读取值时出现的乱码问题。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。