您好,我正在构建一个在 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
当我使用 firebug 发送 3 个字符 €a₤ 调试 POST 请求时,我得到:%E2%82%ACa%E2%82%A4 这是正确的,因为 E2 82 AC 是 € 的代码,E2 82 A4 是₤ 的代码,但 ₤ 存储为?在数据库中。 当我将 ₤ 直接保存到数据库中时,它会在网页中正确显示。
我该如何解决这个问题?
最佳答案
有几个区域您需要检查字符编码是否正确完成,因为一些默认为 UTF-8 而其他则没有(例如,iso-8859-1)。检查:
- JDBC 驱动程序
- Java 虚拟机(只能解析基于拉丁语和 unicode - 可以运行 native2ascii 将非拉丁字符转换为 unicode)
- 数据库编码
- Tomcat/JBoss 等(服务器)
- 浏览器
- 操作系统
必须检查所有这些东西让人头疼,但总得有人去做。我建议将所有内容都设置为 UTF-8,因为这是人们普遍同意的
在我看来,JVM 或您的 JDBC 驱动程序可能是问题的根源
关于java - 特殊字符不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2706100/