i18n:在JSP中没有正确显示变音符号

时间:2010-09-28 20:21:47

标签: java jsp unicode spring-mvc character-encoding

我有一个JSP,它应该通过使用fmt:message来显示某些.properties文件中的一些德语文本,例如

.properties文件中的相应条目是: service.test.hware.test =硬件prüfen (第二个单词中r和f之间的变音符号)。

在Internet Explorer上,显示为:

硬件prüfen

变形金刚被破坏了。关于这里发生了什么的任何想法?请注意,我们正在使用Spring MVC。

3 个答案:

答案 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

alt text

请注意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)

可能是编码问题。它可能是你所服务的编码,在这种情况下你应该

  1. 尝试转换ü代替。这不会修复其他字符,但您可以将所有非ASCII代码点转换为{form其中1234是字符的十进制值,和/或
  2. 以Fred Basset描述的方式命令页面编码。您应该使用UTF-8,除非您有特殊原因不这样做。
  3. 或者用于读取属性文件的编码可能存在问题。如果您使用FileReader,请不要。请使用new InputStreamReader(new FileInputStream(...), encoding),而encoding是属性文件的编码。