使用在带有MySQL数据库的Tomcat 6上运行的Struts 2,我在JSP / Servlet webapp中显示扩展字符时遇到了一个奇怪的问题。我已将此应用程序部署到两个不同的服务器,这两个服务器都连接到同一个数据库并且看起来具有相同的设置(samne版本的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
文件是相同的。
数据库中的字符集设置正确,其中包含正确的字符。我也可以看到它们在开发服务器上正确显示,这让我觉得这不是数据库问题。
我们非常感谢任何建议。
答案 0 :(得分: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
。