IDE環(huán)境造成的亂碼
其實(shí)這個(gè)是非常讓人郁悶的問題,有時(shí)候還真的很難發(fā)現(xiàn)?,F(xiàn)在流行的兩種JavaIDE,idea和eclipse。idea的所有默認(rèn)編碼都是UTF8格式,基本上統(tǒng)一所有編碼,如果你再idea出現(xiàn)了亂碼問題,一般不是idea自身的問題。
如果你看到idea的控制臺(tái)出現(xiàn)了中文亂碼,這很有可能是你選用的字體不支持部分中文造成的,idea不背這個(gè)鍋。
對于eclipse,這貨可能是為了讓中國人寫代碼的時(shí)候更加方便,當(dāng)你點(diǎn)擊目錄中的src,然后點(diǎn)擊file->Properties->Resources,你會(huì)看到,TextFile Encoding默認(rèn)是GBK。是不是很絕望,為了下次不再因?yàn)檫@個(gè)問題產(chǎn)生亂碼,記得創(chuàng)建文件夾以后就配置一下src的encodeing,還是剛剛的那個(gè)路徑,改成UTF-8就行了。
也許你會(huì)說,我根本就沒發(fā)現(xiàn)這里有什么問題啊,我一直是這種設(shè)置也沒有發(fā)生過亂碼。我只能說,那是因?yàn)槟銢]有遇到過。
最常見的一個(gè)場景就是web應(yīng)用中(不使用框架),當(dāng)你提交的表單中存在file域的時(shí)候,你可能會(huì)使用一些文件上傳組件,這些組件處理信息的時(shí)候,會(huì)將表單中的數(shù)據(jù)變成UTF8或者你設(shè)置的格式,但是,如果你的文件編碼是GBK的話,就肯定就會(huì)碰到亂碼的問題了。具體原因有待深究,但個(gè)人覺得這可能是因?yàn)榫幾g后的class字節(jié)碼文件處理信息過程的問題。
POST和GET方法傳遞參數(shù)造成的亂碼
如果你發(fā)現(xiàn)更改了文件編碼并且重新build以后,還是出現(xiàn)亂碼的問題,如果依然是web應(yīng)用的話,那就很有可能是POST和GET方法傳參造成的亂碼。
這個(gè)問題可以看我的文章,POST和GET方法亂碼問題解決方案,寫的其實(shí)非常詳細(xì)了。
數(shù)據(jù)庫編碼格式導(dǎo)致的
如果你發(fā)現(xiàn),你從數(shù)據(jù)庫中讀取出的數(shù)據(jù)是亂碼的,那么原因也很簡單,是因?yàn)閿?shù)據(jù)庫的字符集配置問題。
首先,進(jìn)入mysql的控制臺(tái),也就是命令行中。輸入如下語句,查看mysql的字符集配置。
- 方法一:show variables like 'collation_%';
- 方法二:show variables like 'character_set_%';
如果你看到,字符集列表中有顯示各種字符集的配置都是拉丁文,也就是lantin這樣子的。那么毫無疑問是因?yàn)樽址呐渲脝栴}了。對于不同的系統(tǒng),配置的方法都是相同的,那就是找到mysql文件的配置信息路徑,一般linux可以按照我的這篇文章來進(jìn)行配置,windows也可以參考,只需要找到配置文件,做最后的字符配置操作即可。windows的mysql配置文件一般在mysql的安裝目錄下,如果沒有,那么可以自己建一個(gè)名為my.cnf的文件(如果無效,試試新建mysqld.cnf文件),然后在文件中輸入如下配置信息:
[mysqld]
character-set-server=utf8
[mysql]
default-character-set=utf8
[client]
default-character-set=utf8