原文地址:
http://blog.ustcer.cn/blog.aspx?blogid=1131#diary_14800 ----------------------------------
本文討論的中文亂碼包括兩個方面:普通網(wǎng)頁亂碼和mysql數(shù)據(jù)庫中文數(shù)據(jù)亂碼。
原因:主要是不同的環(huán)境下對中文數(shù)據(jù)的編碼方式不同,在數(shù)據(jù)傳輸?shù)倪^程中,出現(xiàn)了
由于系統(tǒng)自動轉(zhuǎn)換而導(dǎo)致編碼方式不一致,而出現(xiàn)中文數(shù)據(jù)亂碼問題
1、普通亂碼
分析1:主要是由于在普通頁面上使用的是GB2312或者GBK編碼(BIG5為中文繁體編
碼),在頁面間進(jìn)行中文數(shù)據(jù)傳輸時,會采用ISO-8859-1編碼方式,所以為了不出現(xiàn)亂
碼,需要將按ISO-8859-1編碼的中文數(shù)據(jù)重新轉(zhuǎn)換為GB2312或者GBK編碼。
解決:其中oldStr為接收前的中文數(shù)據(jù),newStr為處理后的數(shù)據(jù),在新的頁面中使用
newStr就不會出現(xiàn)亂碼了。
byte[] b = oldStr.getBytes("ISO-8859-1");
newStr = new String(b,"GB2312");
其實如果在JAVA應(yīng)用程序中出現(xiàn)中文亂碼問題,可以通過類似的方法進(jìn)行解決。
分析2:當(dāng)使用Flash作為表單進(jìn)行中文數(shù)據(jù)傳輸時,也會出現(xiàn)亂碼,這時候只要在Flash
的源文件的第1幀中輸入下面的代碼,其他同分析1,則可解決中文亂碼問題。
System.useCodepage = true; //通知 Flash Player使用傳統(tǒng)代碼頁來解釋外部文本
2、mysql中文數(shù)據(jù)亂碼,其中mysql數(shù)據(jù)庫采用的是默認(rèn)配置。
分析1:在4.x的版本中,使用mysql control center來作為管理數(shù)據(jù)庫的工具,這時可
以通過下面的方法解決。
url =
"jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=GB2312";
也就是說在通常的url后面加入useUnicode=true&characterEncoding=GB2312,實際上起
作用的還是characterEncoding=GB2312
分析2:在5.x的版本中使用mysql control center會出問題,所以一般使用mysql官方出
的mysql query browser 和 mysql administrator來進(jìn)行數(shù)據(jù)管理??梢酝ㄟ^分析1中的
方法來處理中文亂碼問題,但這時可以看到在mysql query browser中的數(shù)據(jù)還是亂碼,
原因不詳,但可將數(shù)據(jù)庫中相應(yīng)表中存取中文數(shù)據(jù)的字段的Column Charset改為gb2312
或者gbk,則可以正常顯示了。
分析3:當(dāng)使用數(shù)據(jù)源進(jìn)行數(shù)據(jù)庫連接操作時,則需要將mysql數(shù)據(jù)庫默認(rèn)的編碼方式改
為GB2312或者GBK,具體的操作在mysql數(shù)據(jù)庫detail配置時,會提示數(shù)據(jù)庫將采用的編
碼方式,將其改為GB2312或者GBK即可。再將數(shù)據(jù)庫中相應(yīng)表中存取中文數(shù)據(jù)的字段的
Column Charset改為gb2312或者gbk,則可以正常顯示了。
--
If you shed tears when you miss the sun, you will also miss the stars!
歡迎光臨
http://blog.ustcer.cn/wmywind