【问题标题】:i18n : Umlaut not being displayed correctly in JSPi18n:在 JSP 中未正确显示元音变音
【发布时间】:2011-04-18 12:27:55
【问题描述】:

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

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

在 Internet Explorer 上显示为:

硬件推荐

变音符号被破坏。关于这里发生了什么的任何想法?请注意,我们使用的是 Spring MVC。

【问题讨论】:

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


【解决方案1】:

如果您通过org.springframework.context.support.ResourceBundleMessageSource 定义了Spring messageSource,则属性将使用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】:

ü 是典型的源自 UTF-8 的 ü 被错误地编码为 ISO-8859-1 而不是 UTF-8。这是一个程序性证据:

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

由于您提到属性文件中的相同字符在某些 JSP 中可以正常工作,但在其他 JSP 中不能正常工作,那么这意味着浏览器没有被那些 JSP 正确指示使用 UTF-8 来显示字符由服务器返回。

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

注意charset=utf-8的存在。

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

<%@ page pageEncoding="UTF-8" %>

另见:

【讨论】:

  • 感谢您的详细回答。我检查了从服务器返回的内容类型,它与您的示例中指定的完全一致。有问题的 JSP 确实也将 作为它们的第一行,但是仍然存在问题。
  • 您能否确认 100% 确定它与您在 JSP 中显示的属性相同?而且加载和渲染的方式是一样的吗?因为问题的另一个原因可能在那里。
【解决方案3】:

可能是编码问题。它可能在您提供的编码上,在这种情况下您应该

  1. 尝试转换 ü。这不会修复其他字符,但您可以将所有非 ASCII 代码点转换为 { 形式,其中 1234 是字符的十进制值,和/或
  2. 按照 Fred Basset 的描述强制进行页面编码。您应该使用 UTF-8,除非您有特定的理由不这样做。

或者它可能是用于读取属性文件的编码问题。如果您使用的是FileReader,请不要使用。使用new InputStreamReader(new FileInputStream(...), encoding) 代替encoding 是属性文件的编码。

【讨论】:

  • 我有一些关于这个问题的进一步数据。大多数使用上述 JSP fmt:message 标记的屏幕都能正确显示。我必须添加一个 Spring 控制器来决定要转发到的两个不同的 JSP。元音变音的问题只有在涉及控制器时才会出现,直接指向 JSP 的链接可以很好地显示元音变音,如果它们通过控制器则无法正确显示。
猜你喜欢
  • 2015-05-24
  • 2012-05-24
  • 2018-10-15
  • 1970-01-01
  • 2021-02-06
  • 1970-01-01
  • 2012-02-04
  • 2021-08-23
  • 1970-01-01
相关资源
最近更新 更多