gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:58:37 25 4
gpt4 key购买 nike

我有以下 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 字符:

Ëîãèí

更新

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

请帮我把它改成正常的西里尔字母。

属性文件: messages_ru_RU.properties

最佳答案

属性文件符合 specification使用 ISO-8859-1 阅读。

... the input/output stream is encoded in ISO 8859-1 character encoding. Characters that cannot be directly represented in this encoding can be written using Unicode escapes as defined in section 3.3 of The Java™ Language Specification; only a single 'u' character is allowed in an escape sequence. The native2ascii tool can be used to convert property files to and from other character encodings.

因此,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 = \u041B\u043E\u0433\u0438\u043D

然后可以使用以下最低 @page 配置成功读取并显示在 JSP 页面中:

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

(您拥有的其余部分是无关紧要的,因为在上面设置时这些已经是默认值)

如果您使用的是支持 Java 的 IDE,例如 Eclipse,那么您可以只使用其内置的属性文件编辑器,它应该会自动与 Java-faceted 项目中的 .properties 文件相关联。如果您使用此编辑器而不是纯文本编辑器/源代码编辑器,那么它会自动转义未包含在 ISO-8859-1 范围内的字符。

另见:

关于java - 在 JSP 中使用资源包属性进行国际化,非拉丁文本变为 Mojibake,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28026342/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com