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

fre*_*set 4 java unicode jsp spring-mvc character-encoding

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

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

在Internet Explorer上,显示为:

硬件prüfen

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

Bal*_*usC 6

ü是典型的用于UTF-8发源于ü被不正确地编码为ISO-8859-1代替的UTF-8.这是一个程序性证据:

System.out.println(new String("ü".getBytes("UTF-8"), "ISO-8859-1")); // ü
Run Code Online (Sandbox Code Playgroud)

既然你提到属性文件中的相同字符在某些JSP中工作正常,但在其他JSP中却没有,那么这意味着浏览器没有正确地指示那些JSP使用UTF-8来显示由返回的字符返回的字符.服务器.

该指令发生在HTTP Content-Type头中.使用任何HTTP标头调试工具,您必须能够计算返回的标头.Firebug是一种流行的工具.

替代文字

注意存在charset=utf-8.

通常,在JSP中,只需将以下行放在JSP文件的顶部即可实现:

<%@ page pageEncoding="UTF-8" %>
Run Code Online (Sandbox Code Playgroud)

也可以看看:


小智 6

如果您已经messageSource通过org.springframework.context.support.ResourceBundleMessageSource属性定义了Spring iso-8859-1,那么即使对属性文件进行了utf-8编码,Java 也会加载编码(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>
Run Code Online (Sandbox Code Playgroud)