您好我正在构建一个在Tomcat 6.0.20和JDK 1.6.0_19上运行的Spring MVC Web应用程序。当我通过HTML表单发送一些特殊字符时,其中一些字符存储为问号?
例如,这些符号存储正确:€,á,é,í,‰等 但有些符号被替换?喜欢:₤,♪,☺
MySQL表charset是utf-8。我的jsp也使用utf-8
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
我已按照建议here
在web.xml中包含了org.springframework.web.filter.CharacterEncodingFilter当我用firebug发送3个字符€a₤调试POST请求时,我得到:%E2%82%ACa%E2%82%A4这是正确的,因为E2 82 AC是€和E2的代码82 A4是₤但₤的代码存储为?在数据库中。 当我将save直接保存到数据库中时,它会在网页中正确显示。
我该如何解决这个问题?
答案 0 :(得分:2)
有几个区域需要检查字符编码是否正确完成,因为默认情况下是UTF-8而其他区域编码没有(例如,iso-8859-1)。检查:
要检查所有这些东西是痛苦的,但有人必须这样做。我建议将所有内容设置为UTF-8,因为这通常是人们同意的
对我而言,听起来像JVM或JDBC驱动程序可能是问题的根源
答案 1 :(得分:2)
首先将这些字符打印到支持UTF-8的标准输出。如果它们看起来不对,那么您需要设置HTTP请求编码。如果它们看起来正确,那么问题确实存在于数据访问层中。使用独立的数据库管理工具手动插入和查看这些字符。如果它们看起来不对,那么您需要设置DB(和表!)编码。如果它们看起来正确,则问题出在JDBC驱动程序/连接字符串中。还要检查JDBC驱动程序版本是否与数据库匹配,并且是最新的。
您可以在this article中找到更多背景信息,实用说明和详细解决方案。