【问题标题】:internationalization prints gibberish国际化打印乱码
【发布时间】:2014-03-16 19:08:11
【问题描述】:

我想将 i18n 添加到我的网络项目中。

但我打印的是乱码,之前

之后

这是页面代码的页面sn-p:

<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" %>

<c:set var="language"
       value="${not empty param.language ? param.language : not empty language ? language : pageContext.request.locale}"
       scope="session"/>
<fmt:setLocale value="${language}"/>
<fmt:setBundle basename="com.java.task11.i18n.text"/>

<html lang="${language}">
<head>
    <title>Profile Info</title>
    <jsp:include page="parts/header.jsp"/>
</head>

<body>
<div class="container-fluid users-table">
    <%--navbar--%>
    <div class="row">
        <div class="col-md-10 col-xs-12 col-md-offset-1 table-nav">
            <jsp:include page="parts/navbar.jsp"/>
        </div>
    </div>

navbar.jsp的sn-p:

<li class="lang">
   <a href="<%= request.getContextPath()%>?language=${language == 'ua' ? 'en' : 'uk'}">
       ${language == 'ua' ? 'EN' : 'UKR'}
   </a>
</li>

这里是资源包查找:

我不明白为什么会这样?

如何解决这个问题?

【问题讨论】:

  • 问题出在ResourceBundle。它无法读取除 ISO-8859-1 之外的任何其他编码的属性文件...如果您不坚持使用ResourceBundle,我有一个可以提供帮助的库

标签: java web internationalization resourcebundle


【解决方案1】:

我的假设是您使用ResourceBundle

不幸的是,出于向后兼容性的原因,它无法读取除 ISO-8859-1 之外的任何其他编码的属性文件。而且您的属性文件似乎是用 UTF-8 编码的。

演示:让我们在类路径的根目录取一个文件名t.properties,其内容以UTF-8编码:

mouton = bêêêê

现在,让我们尝试打印出这个mouton 密钥:

final ResourceBundle bundle = ResourceBundle.getBundle("t");
System.out.println(bundle.getString("mouton"));

输出:

bêêêê

垃圾。

这就是我开发没有这个问题的this library 的原因;它可以读取 UTF-8 格式的 i18n 属性文件。示范:

// Reads in UTF-8 by default; can choose any encoding
final MessageBundle bundle = PropertiesBundle.forPath("t");
System.out.println(bundle.getMessage("mouton"));

输出:

bêêêê

正确!

“有趣”的是,它使用了 method which is available in Properties(从 1.6 开始),但 ResourceBundle 没有使用它,也没有提供使用它的方法......

【讨论】:

  • 如果我不使用 Maven。我是否将其作为 zip 文件附加到项目中?
  • 这和 btf,是的;两者都可以在 Bintray 上下载。但是为什么不用gradle(比maven好)呢?
  • 你能简单解释一下 gradle 比 maven 更好吗?以及它在这里有什么帮助?
  • 构建文件写起来更短,例如;它可以做所有 maven 做的事情以及你想要它做的所有事情。你不受 Maven 允许你做什么的限制;)
  • 我将此 zip 文件添加到类路径中,但它一直打印乱码。
【解决方案2】:

我找到了解决办法:

写入 unicode 符号。为此:

IDEA -- 具有特殊的“透明原生到 ASCII 转换”选项(设置 > 文件编码)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-17
    • 2020-12-24
    • 2019-10-01
    • 1970-01-01
    • 2014-03-31
    • 1970-01-01
    • 2012-06-21
    • 1970-01-01
    相关资源
    最近更新 更多