亂碼有以下幾方面原因造成:
- 取數據亂碼
- 調試數據亂碼
- 傳遞數據亂碼
第1種情況主要是注意你所取得的數據來自文本還是頁面傳遞,這個很容易解決,注意整個項目編碼格式和獲取到的數據格式一樣,建議統一使用UTF-8編碼。主要說說第2種和第3種情況。
調試數據亂碼
在確認了第1種情況下無亂碼時,但在myeclipse控制臺輸出中文為亂碼。原因是英文系統默認顯示格式為英文,應將系統控制面板
“Clock, Language, and Region”——“Region and Language”——“Formats”選項卡里的“Format”選擇簡體中文。之后重啟myeclipse。
傳遞數據亂碼
在確認了第1、2種情況下無亂碼時,即數據在調試中,內存數據值顯示正常,但插入數據庫顯示問號。原因可能是數據庫建庫時沒用統一的編碼格式,如果統一使用UTF-8編碼,建議按下圖所示建庫。
當在數據庫客戶端里使用insert into和select均顯示正常中文后,數據庫這邊就保證了中文的正常顯示。
接下來,需要設置數據庫連接的編碼格式。如果是采用SSH2的話,在applicationContext.xml里找到數據庫連接的代碼,改成如下所示:
<property name="url" value="jdbc:mysql://localhost:3306/DBName?useUnicode=true&characterEncoding=utf-8">
</property>
最后再在web.xml里添加Spring的編碼轉換過濾器就可以了。
<filter>
<filter-name>CharacterEncoding</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>ignore</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>