2010-04-24 143 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找到更多的背景信息,實際的解釋和詳細的解決方案。