在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。 这对我有用。