我有一个JSP,它应该通过使用fmt:message来显示某些.properties文件中的一些德语文本,例如
.properties文件中的相应条目是: service.test.hware.test =硬件prüfen (第二个单词中r和f之间的变音符号)。
在Internet Explorer上,显示为:
硬件prüfen
变形金刚被破坏了。关于这里发生了什么的任何想法?请注意,我们正在使用Spring MVC。答案 0 :(得分:6)
ü
是典型的UTF-8发起的ü
错误编码为ISO-8859-1而不是UTF-8。这是一个程序化的证据:
System.out.println(new String("ü".getBytes("UTF-8"), "ISO-8859-1")); // ü
既然你提到属性文件中的相同字符在某些JSP中工作正常,但在其他JSP中却没有,那么这意味着浏览器没有被正确指示使用UTF-8来显示字符由服务器返回。
此指令发生在HTTP Content-Type
标头中。使用任何HTTP标头调试工具,您必须能够计算返回的标头。其中一个受欢迎的工具是Firebug。
请注意charset=utf-8
。
通常,在JSP中,只需将以下行放在JSP文件的顶部即可实现:
<%@ page pageEncoding="UTF-8" %>
答案 1 :(得分:6)
如果您通过messageSource
定义了Spring org.springframework.context.support.ResourceBundleMessageSource
,则属性将加载iso-8859-1
编码,即使属性文件是utf-8
编码的(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>
答案 2 :(得分:0)
可能是编码问题。它可能是你所服务的编码,在这种情况下你应该
或者用于读取属性文件的编码可能存在问题。如果您使用FileReader
,请不要。请使用new InputStreamReader(new FileInputStream(...), encoding)
,而encoding
是属性文件的编码。