AFAIK,Spring的ResourceBundleMessageSource
建立在标准J2SE java.util.ResourceBundle
和java.util.Properties
之上,它们无法处理ISO-8859-1以外的文件编码。
但在许多示例代码中,我看到了这一点:
ReloadableResourceBundleMessageSource resource = new ReloadableResourceBundleMessageSource();
resource.setBasename("classpath:messages");
resource.setDefaultEncoding("UTF-8");
行resource.setDefaultEncoding("UTF-8");
的功能是什么?这让我很困惑,任何人都能解释一下吗?
答案 0 :(得分:1)
在ReloadableResourceBundleMessageSource:
中按如下方式加载属性this.propertiesPersister.load(props, new InputStreamReader(is, encoding));
查看spring-context source code。在更进一步的课程中,文件通过java.util.Properties
public void load(Reader reader)
方法读取,该方法将编码识别InputStreamReader(is, encoding)
作为参数。
这意味着常规java.util.Properties
也可以加载不同的编码。
示例强>
PropertyReader.java
package com.example;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Locale;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class PropertyReader {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("context.xml");
List<String> locales = new ArrayList<String>(Arrays.asList("en", "ru", "de"));
for (String loc : locales) {
Locale locale = new Locale(loc);
String value = context.getMessage("example", null, locale);
System.out.println(value);
}
((AbstractApplicationContext) context).close();
}
}
context.xml中
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basename">
<value>messages</value>
</property>
<property name="defaultEncoding">
<value>UTF-8</value>
</property>
</bean>
</beans>
messages.properties
example=Example
messages_de.properties
example=Beispiel
messages_ru.properties
example=образец
没有defaultEncoding的结果
在context.xml中注释属性
Example
обÑазеÑ
Beispiel
使用defaultEncoding的结果
Example
образец
Beispiel
程序化方法的结果相同。