2

最近我根据如何国际化 Java Web 应用程序实现了国际化?.

但是现在我在某些页面中遇到了问题。如果是英语,则显示良好,但如果我们选择任何其他语言,则该页面中的所有值都显示为?????????

图片

我检查了服务器日志中的异常,但找不到任何人。

这是如何引起的,我该如何解决?

4

2 回答 2

5

看到??????而不是可理解的字符(甚至不是Mojibake)通常表明负责的数据传输本身非常了解源和目标中使用的编码。在一般的 Web 应用程序中,只有 2 个地方会出现这种情况:通过 JDBC 将数据传输到/从 DB 传输的时间点以及将数据传输到 HTTP 响应的时间点response.getWriter()(由 JSP 隐式使用) .

在您使用属性文件的特殊情况下,没有数据库,因此 HTTP 响应仍然是主要嫌疑人。如果没有指示服务器使用 UTF-8 来解码写入 HTTP 响应的字符,而是使用某些平台默认编码(最常见的是 ISO-8859-1),则可能会发生此问题。这样,ISO-8859-1 未涵盖的源代码中的任何字符都将变成问号。由于 ISO-8859-1 专门用于拉丁字符,因此这将影响所有非拉丁字符,例如中文、日文、阿拉伯文、西里尔文、希伯来文、梵文等。它们都将被写成问号。

这可以通过将以下内容添加到 JSP 的最顶部来针对每个 JSP 进行修复:

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

(请注意,您确实需要将其放入每个JSP 以及包含文件中!)

或者,更好的是,通过将以下条目添加到 webapp 来在应用程序范围内修复它web.xml

<jsp-config>
    <jsp-property-group>
        <url-pattern>*.jsp</url-pattern>
        <page-encoding>UTF-8</page-encoding>
    </jsp-property-group>
</jsp-config>

也可以看看:

于 2012-10-30T12:46:05.173 回答
0

实际上,在发送响应之前,我们在 servlet 中缺少一行。

即我们忘记设置内容类型。

这是要包含在 servlet 中的代码

response.setContentType("text/html;charset=UTF-8");

谢谢

于 2012-11-01T15:10:12.287 回答