最近,我实施了基于How to internationalize a Java web application?的国际化。
但是现在我在某些页面遇到了问题。如果它是英语,则表现良好,但如果我们选择任何其他语言,则该页面中的所有值都显示为?????????
。
我已检查过服务器日志中的异常,但我找不到任何人。
这是如何引起的?如何解决?
答案 0 :(得分:2)
看到??????
而不是可理解的字符(甚至代替Mojibake)通常表明负责的数据传输本身非常了解源和目标中使用的编码。在普通的Web应用程序中,只有两个地方出现这种情况:数据通过JDBC传输到数据库或从数据传输到数据库的时间点以及数据通过response.getWriter()
传输到HTTP响应的时间点(如JSP隐式使用。)
在具有属性文件的特定情况下,无法使用数据库,因此HTTP响应仍然是主要的嫌疑人。如果未指示服务器使用UTF-8解码正在写入HTTP响应的字符,而是使用某些平台默认编码(最常见的是ISO-8859-1),则会发生此问题。这样,源ISO-8859-1中不是covered的任何字符都将变成问号。由于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>
答案 1 :(得分:0)
实际上,在调度响应之前,我们在servlet中缺少一行。
即。我们忘了设置内容类型。
以下是要包含在servlet中的代码
response.setContentType("text/html;charset=UTF-8");
由于