2010-04-24 41 views
1

您好,我正在构建一个在Tomcat 6.0.20和JDK 1.6.0_19上运行的Spring MVC Web应用程序。当我通过HTML表单发送一些特殊字符时,其中一些存储为问号?特殊字符不一致

例如这些符号存储正确:€,á,é,í,‰等 但是一些符号被替换为?如:₤,♪,☺

MySQL表字符集是utf-8。我也JSP使用UTF-8

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %> 

我在web.xml中包括org.springframework.web.filter.CharacterEncodingFilter的建议here

当我发3个字符时调试POST请求€一个₤与萤火虫我得到:%E2%82%ACa%E2%82%A4这是正确的,因为E2 82 AC是代码€和E2 82 A4是代码为₤但₤存储为?在数据库中。 当我将₤直接保存到数据库中时,它会正确显示在网页中。

我该如何解决这个问题?

回答

2

有几个方面需要检查字符编码是否正确完成,因为某些UTF-8默认为UTF-8,而另一些则没有(例如iso-8859-1)。检查:

  • JDBC驱动程序
  • Java虚拟机(只能解析基于拉丁语和unicode - 可以运行native2ascii的非拉丁字符转换为Unicode)
  • 数据库编码
  • 的Tomcat/JBoss的,等(服务器)
  • 浏览器
  • 操作系统

它必须检查所有这些东西是一件痛苦的事情,但有人必须这样做。我建议设置一切UTF-8作为一般是什么人在

同意我这听起来像JVM或JDBC驱动程序可能是问题的根源

+0

谢谢你这是一个JDBC配置问题。我将这添加到连接url:useUnicode = true&characterEncoding = UTF8,现在它工作。 – Enrique 2010-04-24 22:41:47

2

首页打印那些字符的UTF- 8个可用的标准输出。如果他们看起来不对,那么你需要设置HTTP请求编码。如果它们看起来正确,那么问题确实在数据访问层。使用独立的数据库管理工具手动插入和查看这些字符。如果他们看起来不对,那么你需要设置DB(和table!)编码。如果它们看起来正确,那么问题出现在JDBC驱动程序/连接字符串中。同时检查JDBC驱动程序版本是否与数据库匹配,并且是最新版本。

你可以在this article找到更多的背景信息,实际的解释和详细的解决方案。