相信大家在開發初期遇到中文亂碼問題一定是一頭霧水,不是數據庫亂碼了就是頁面亂碼了或者傳值時亂碼。其實解決亂碼的途徑很簡單,就是統一編碼與解碼的類型,我把自己遇到的亂碼問題整理出來,希望能夠對大家有用。
首先需要對ide下的編碼做統一,我使用的是idea,在頁面下面如圖所示都有文件編碼類型,選擇utf-8:
配置完后,需要對idea的全局編碼也進行配置,在idea的配置中進行設置,Preferences中輸入encoding,然后進行如下配置
配置完后,如果是jsp頁面,那么也需要在jsp頁面中統一添加如下代碼:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
配置完上述配置后,一般出現亂碼情況也只有我們在傳遞數據的時候編碼與解碼方法不一致,我遇到的有下面兩種,數據庫與頁面間傳值。
數據庫中文亂碼意思是本來在我們頁面中的中文是顯示正確的,但是存入數據庫時,要么寫入sql時出現了亂碼,要么存入了數據庫后變成了亂碼。有以下幾點需要注意:
1.在連接數據庫時,在jdbc_url中添加useUnicode=true&characterEncoding=utf8,這樣做指定了字符的編碼與解碼的格式。
jdbc:mysql://localhost:3307/dbbasename?useUnicode=true&characterEncoding=utf8
在需要向數據庫存入數據時,會先用UTF-8格式將數據解碼成字節碼,然后再將解碼后的字節碼重新使用GBK編碼存放到數據庫中。
在取數據時,數據庫會先將數據庫中的數據按GBK格式解碼成字節碼,然后再將解碼后的字節碼重新按UTF-8格式編碼數據,返回給客戶端。
數據庫也需要進行相應的設置,我們通過以下語句來查看我們數據庫的編碼方式:
show variables like "%char%";
一般是需要結果如下圖所示:
如果不對,可以使用set names utf8
語句來配置。
在配置完數據庫的編碼格式后,我們在創建數據庫與數據表的時候最好也統一一下格式,加入如下圖的語句:
到這里數據庫就配置完成,一般情況下不會再出現中文亂碼情況。
下面說下頁面間傳值,在前台的表單數據,傳輸到后台是,利用request.getParameter()語句取值時,發現中文亂碼,此時有兩種情況,一種是post提交方式,可以采用spring的字符編碼過濾器,在
web.xml中添加以下配置:
<!-- 配置Spring字符編碼過濾器 --> <filter> <filter-name>CharacterEncodingFilter</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> </filter> <filter-mapping> <filter-name>CharacterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
還有一種是get方式出現中文亂碼,此時上種配置spring字符集的方法就沒有用了,需要在tomcat文件夾下的conf/servler.xml中設置,找到一下代碼,在最后加入URIEncoding=”UTF-8”
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443"/> 改成: <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8"/>
上述為我在開發過程中遇到的中文亂碼問題,希望在看了這篇文章后能夠解決大家的中文亂碼問題。