特殊字符不一致

时间:2010-04-24 20:56:13

标签: java spring jsp encoding

您好我正在构建一个在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直接保存到数据库中时,它会在网页中正确显示。

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

有几个区域需要检查字符编码是否正确完成,因为默认情况下是UTF-8而其他区域编码没有(例如,iso-8859-1)。检查:

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

要检查所有这些东西是痛苦的,但有人必须这样做。我建议将所有内容设置为UTF-8,因为这通常是人们同意的

对我而言,听起来像JVM或JDBC驱动程序可能是问题的根源

答案 1 :(得分:2)

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

您可以在this article中找到更多背景信息,实用说明和详细解决方案。