我有一个JSP页面,应该通过fmt:message从.properties文件中显示一些德语文本,例如:
.properties文件中对应的条目是: service.test.hware.test = Hardware prüfen(第2个单词r和f之间有一个umlaut)。
在Internet Explorer上,它会显示为:
Hardware prüfen
umlaut损坏了。这里发生了什么?请注意,我们正在使用Spring MVC。
我有一个JSP页面,应该通过fmt:message从.properties文件中显示一些德语文本,例如:
.properties文件中对应的条目是: service.test.hware.test = Hardware prüfen(第2个单词r和f之间有一个umlaut)。
在Internet Explorer上,它会显示为:
Hardware prüfen
umlaut损坏了。这里发生了什么?请注意,我们正在使用Spring MVC。
org.springframework.context.support.ResourceBundleMessageSource
定义了Spring的messageSource
,那么即使属性文件是以utf-8
编码,属性也会以iso-8859-1
编码加载(Java默认以iso-8859-1
编码加载属性)。org.springframework.context.support.ReloadableResourceBundleMessageSource
。您可以通过该MessageSource
实现配置默认编码。有关该类的更多信息/特性,请参见Javadoc文档。<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<property name="basename" value="classpath:message"/>
<property name="defaultEncoding" value="UTF-8" />
</bean>
ü
是一个典型的UTF-8编码的 ü
被错误地编码为ISO-8859-1而不是UTF-8。以下是程序化证据:
System.out.println(new String("ü".getBytes("UTF-8"), "ISO-8859-1")); // ü
Content-Type
头部。通过使用任何HTTP头部调试工具,您必须能够找出返回的头信息。其中一个流行的工具是 Firebug。charset=utf-8
的存在。<%@ page pageEncoding="UTF-8" %>
可能是编码问题。这可能是由于您提供的编码方式导致的,因此您应该:
或者这可能是读取属性文件时使用的编码方式的问题。如果您正在使用FileReader
,请不要使用它。改用new InputStreamReader(new FileInputStream(...), encoding)
,其中encoding
是属性文件的编码方式。