亂碼有以下幾方面原因造成:
- 取數(shù)據(jù)亂碼
- 調(diào)試數(shù)據(jù)亂碼
- 傳遞數(shù)據(jù)亂碼
第1種情況主要是注意你所取得的數(shù)據(jù)來(lái)自文本還是頁(yè)面?zhèn)鬟f,這個(gè)很容易解決,注意整個(gè)項(xiàng)目編碼格式和獲取到的數(shù)據(jù)格式一樣,建議統(tǒng)一使用UTF-8編碼。主要說(shuō)說(shuō)第2種和第3種情況。
調(diào)試數(shù)據(jù)亂碼
在確認(rèn)了第1種情況下無(wú)亂碼時(shí),但在myeclipse控制臺(tái)輸出中文為亂碼。原因是英文系統(tǒng)默認(rèn)顯示格式為英文,應(yīng)將系統(tǒng)控制面板
“Clock, Language, and Region”——“Region and Language”——“Formats”選項(xiàng)卡里的“Format”選擇簡(jiǎn)體中文。之后重啟myeclipse。
傳遞數(shù)據(jù)亂碼
在確認(rèn)了第1、2種情況下無(wú)亂碼時(shí),即數(shù)據(jù)在調(diào)試中,內(nèi)存數(shù)據(jù)值顯示正常,但插入數(shù)據(jù)庫(kù)顯示問(wèn)號(hào)。原因可能是數(shù)據(jù)庫(kù)建庫(kù)時(shí)沒(méi)用統(tǒng)一的編碼格式,如果統(tǒng)一使用UTF-8編碼,建議按下圖所示建庫(kù)。
當(dāng)在數(shù)據(jù)庫(kù)客戶(hù)端里使用insert into和select均顯示正常中文后,數(shù)據(jù)庫(kù)這邊就保證了中文的正常顯示。
接下來(lái),需要設(shè)置數(shù)據(jù)庫(kù)連接的編碼格式。如果是采用SSH2的話(huà),在applicationContext.xml里找到數(shù)據(jù)庫(kù)連接的代碼,改成如下所示:
<property name="url" value="jdbc:mysql://localhost:3306/DBName?useUnicode=true&characterEncoding=utf-8">
</property>
最后再在web.xml里添加Spring的編碼轉(zhuǎn)換過(guò)濾器就可以了。
<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>