Java 国际化使用JSP中的资源包属性,非拉丁语文本变为Mojibake
我有以下index.jsp:Java 国际化使用JSP中的资源包属性,非拉丁语文本变为Mojibake,java,jsp,utf-8,internationalization,jstl,Java,Jsp,Utf 8,Internationalization,Jstl,我有以下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>
<%@ 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>
问题是我在输出中得到了垃圾unicode字符:
Ëîãèí
更新
将.properies文件编码更改为UTF-8。
最新输出:ÐоÐин
请帮我把这个改成普通的西里尔字母
属性文件:
属性文件按照ISO-8859-1读取 。。。输入/输出流采用ISO 8859-1字符编码。在这种编码中不能直接表示的字符可以使用Java规范第3.3节中定义的Unicode转义来编写™ 语言规范;转义序列中只允许一个“u”字符。native2ascii工具可用于在其他字符编码之间转换属性文件 因此,任何不在范围内的字符都需要在
\uxxx
中转义。您可以使用JDK提供的native2ascii
工具来转换它们。您可以在JDK的/bin
文件夹中找到它
下面是一个示例,假设foo\u utf8.properties
是您使用UTF-8保存的属性,而foo.properties
是您希望在应用程序中使用的属性:
native2ascii–编码UTF-8 foo\u utf8.properties foo.properties
在您的特定情况下,相关财产将转换为:
login=\u041B\u043E\u0433\u0438\u043D
然后,可以通过以下最低@page
配置成功读取并显示在JSP页面中:
<%@ page pageEncoding="UTF-8" %>
(您拥有的剩余部分是不相关的,因为在设置上述内容时,这些都是默认值)
如果您使用的是一个支持Java的IDE,比如Eclipse,那么您可以使用它的内置属性文件编辑器,它应该自动与Java分面项目中的.properties
文件关联。如果使用此编辑器而不是纯文本编辑器/源代码编辑器,则它将自动转义ISO-8859-1范围中未包含的字符
另见:
我的印地语也有同样的问题,所以我将页面编码改为UTF-8,并使用Unicode编码保存文件。因为我在.properties文件中给出了Unicode。这对我很有用。因为Java SE属性文件是以UTF-8编码加载的
请参阅和UTF-8中的*.properties文件是否已更改?@DmitryTsechoev将字符集更改为UTF-8。新输出为:ÐоÐин
<%@ page pageEncoding="UTF-8" %>