最近我基于How to internationalize a Java web application?实现了国际化.
但是现在我在某些页面中遇到了问题。如果是英语,它显示得很好,但如果我们选择任何其他语言,那么该页面中的所有值都会显示为 ?????????
。
我已检查服务器日志中是否有异常,但找不到任何人。
这是怎么造成的,如何解决?
最佳答案
看到 ??????
而不是可理解的字符(甚至不是 Mojibake )通常表明负责数据传输的人本身就非常清楚在这两个字符中使用的编码源和目的地。在普通的 Web 应用程序中,只有 2 个地方会出现这种情况:通过 JDBC 将数据传输到 DB 或从 DB 传输数据的点,以及通过 response.getWriter( 将数据传输到 HTTP 响应的点) )
(JSP 隐式使用)。
在您使用属性文件的特定情况下,无法使用数据库,因此 HTTP 响应仍然是主要嫌疑对象。当服务器没有被指示使用 UTF-8 来解码写入 HTTP 响应的字符,而是使用某些平台默认编码(最常见的是 ISO-8859-1)时,可能会发生此问题。这样源中不是 covered 的任何字符通过 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>
另请参阅:
关于jsp - Servlet 应用程序中的 Unicode 字符显示为问号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13108466/