使用JSP中的资源包属性进行国际化,非拉丁文本成为Mojibake

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用JSP中的资源包属性进行国际化,非拉丁文本成为Mojibake相关的知识,希望对你有一定的参考价值。

我有以下index.jsp:

<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<fmt:setLocale value="ru_RU"/>
<fmt:setBundle basename="messages"/>
<html>
  <head>
    <title></title>
  </head>
  <body>
  <h1><fmt:message key="login"/></h1>
  </body>
</html>

和属性文件messages_ru_RU.properties:

login = Логин

问题是我在输出中得到了垃圾unicode字符:

Ëîãèí

更新

将.properties文件编码更改为UTF-8。最新产品:Ðогин

请帮助我,将其更改为正常的西里尔字母。

属性文件:messages_ru_RU.properties

答案

属性文件按照使用ISO-8859-1读取的specification

...输入/输出流以ISO 8859-1字符编码进行编码。无法在此编码中直接表示的字符可以使用“Java™语言规范”第3.3节中定义的Unicode转义编写;在转义序列中只允许一个'u'字符。 native2ascii工具可用于将属性文件转换为其他字符编码或从其他字符编码转换。

因此,任何未被ISO-8859-1范围覆盖的角色都需要在Unicode escape sequences uXXXX中逃脱。您可以使用JDK提供的native2ascii工具进行转换。你可以在JDK的/bin文件夹中找到它。

这是一个例子,假设foo_utf8.properties是你使用UTF-8保存的那个,而foo.properties是你想在你的应用程序中使用的那个:

native2ascii –encoding UTF-8 foo_utf8.properties foo.properties

在您的特定情况下,相关财产将转换为:

login = u041Bu043Eu0433u0438u043D

然后可以成功读取并显示在具有以下最小@page配置的JSP页面中:

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

(你所拥有的余数是无关紧要的,因为这些是上面设置时的默认值)

如果您正在使用Eclipse等Java感知IDE,那么您可以使用其内置属性文件编辑器,该编辑器应自动与Java面向项目中的.properties文件相关联。如果您使用此编辑器而不是纯文本编辑器/源编辑器,那么它将自动转义ISO-8859-1范围未涵盖的字符。

See also:

另一答案

Image showing to change to unicode

我对印地语有同样的问题,所以我将pageEncoding更改为UTF-8并使用Unicode编码保存了文件。因为我在.properties文件中给出了unicodes。这对我有用。

以上是关于使用JSP中的资源包属性进行国际化,非拉丁文本成为Mojibake的主要内容,如果未能解决你的问题,请参考以下文章

jsp 中怎样引用 jstl标签

高级特性- 国际化

Struts2 国际化

国际化问题

如何使用 Node 从 MySQL 读取非拉丁字符?

读取托管 bean 中的资源包属性