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

我有以下index.jsp:

         

和属性文件messages_ru_RU.properties:

 login = Логин 

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

 Ëîãèí 

更新

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

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

属性文件: messages_ru_RU.properties

属性文件根据ISO-8859-1读取的规范 。

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

因此,任何未被ISO-8859-1范围覆盖的字符都需要在Unicode转义序列 \uXXXX进行转义。 您可以使用JDK提供的native2ascii工具进行转换。 您可以在JDK的/bin文件夹中找到它。

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

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

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

 login = \u041B\u043E\u0433\u0438\u043D 

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

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

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

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

也可以看看:

  • Unicode – 如何使角色正确?
  • 如何国际化Java Web应用程序?

图像显示更改为unicode

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