【问题标题】:Special characters incongruence特殊字符不一致
【发布时间】:2010-04-25 05:35:04
【问题描述】:

您好,我正在构建一个在 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" %>

按照here的建议,我已在 web.xml 中包含 org.springframework.web.filter.CharacterEncodingFilter

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

我该如何解决这个问题?

【问题讨论】:

    标签: java spring jsp encoding


    【解决方案1】:

    您需要在多个区域检查字符编码是否正确,因为有些默认为 UTF-8,有些则没有(例如,iso-8859-1)。检查:

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

    检查所有这些东西让人头疼,但总得有人去做。我建议将所有内容都设置为 UTF-8,因为这通常是人们同意的

    在我看来,JVM 或您的 JDBC 驱动程序可能是问题的根源

    【讨论】:

    • 谢谢,这是 JDBC 配置问题。我将此添加到连接 url:useUnicode=true&characterEncoding=UTF8 现在它可以工作了。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2019-11-07
      • 2013-12-27
      • 2016-02-06
      • 2021-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-03
      • 1970-01-01
      相关资源
      最近更新 更多