jsp - Servlet 应用程序中的 Unicode 字符显示为问号

标签 jsp servlets character-encoding internationalization jstl

最近我基于How to internationalize a Java web application?实现了国际化.

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

image

我已检查服务器日志中是否有异常,但找不到任何人。

这是怎么造成的,如何解决?

最佳答案

看到 ?????? 而不是可理解的字符(甚至不是 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/

相关文章:

Java、OpenOffice、创建获取文档作为 jsp 响应作为 pdf

java - 使用二进制编码将 byte[] 转换为 String

powershell - Powershell,无法输入带有某些非ASCII字符的哈希表键(在脚本中)

java - 如何使用确认密码验证密码然后重定向?

SendRedirect 后未找到 JSP

java - 将参数从 JSP 页面传递给 java 方法以持久保存到数据库

java - 在返回响应之前获取 servlet 请求的状态

javascript - 如何使用 Javascript 在浏览器中解析非 UTF8 XML?

java - 在 JSP 上使用 jSTL setBundle 从 jar 读取属性文件

java - 从网页获取 Java 或 C 程序的输入?