【问题标题】:Tomcat6 UTF-8 Character display ProblemTomcat6 UTF-8 字符显示问题
【发布时间】:2011-11-04 09:24:48
【问题描述】:

我有一个奇怪的问题,即使用在 Tomcat 6 上运行的 Struts 2 和 MySQL 数据库在 JSP/Servlet webapp 中显示扩展字符。我已经将此应用程序部署到两台不同的服务器上,它们都连接到同一个数据库并且似乎具有相同的设置(相同版本的 Ubuntu、相同版本的 tomcat、相同版本的 MySQL 等)和一台服务器(我的开发服务器)扩展字符显示正常,但在另一个(我的生产服务器 - 典型!)上它们不显示。所以我假设一定有一些服务器配置设置我没有在生产服务器上正确完成。

我检查过的一些事情:

  • 我的所有.jsp 页面中都有以下几行:

    <%@ page language="java" pageEncoding="utf-8" contentType="text/html;charset=utf-8" %>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <meta equiv="Content-Type" content="text/html; charset=UTF-8" />
    
  • 生产服务器和开发服务器上的Tomcat server.xml文件相同,包含URIEncoding="UTF-8"

  • 生产服务器和开发服务器上的web.xml文件是一样的。

  • 数据库中的字符集设置正确,其中包含正确的字符。我还可以看到它们在开发服务器上正确显示,这让我认为这不是数据库问题。

任何建议将不胜感激。

【问题讨论】:

  • 在 server.xml 的连接器配置中添加 URIEncoding="UTF-8" 然后尝试。
  • 谢谢阿萨德。 URIEncoding="UTF-8" 在我的开发服务器和生产服务器上的 server.xml 文件中,但它似乎仍然不适用于生产服务器。

标签: mysql jsp tomcat utf-8 character-encoding


【解决方案1】:

您已经涵盖了几乎所有内容。您的列表中唯一没有涉及的是 MySQL JDBC 连接 URL。每当 JDBC URL 中未指定 characterEncoding 属性时,MySQL JDBC 驱动程序将使用平台默认字符集发送数据。显然您的生产服务器平台没有使用 UTF-8 作为默认字符集。您需要修复 MySQL JDBC 连接 URL,如下所示:

jdbc:mysql://localhost:3306/db_name?useUnicode=yes&characterEncoding=UTF-8

您没有涉及的另一件事是请求编码。这不一定与您的问题直接相关,因为您会在其他环境中看到同样的问题。但你也应该有一个Filter,它基本上是request.setCharacterEncoding("UTF-8"),只要它被检索为null

另见:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-15
    • 2010-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-19
    • 2012-11-10
    相关资源
    最近更新 更多