編碼問題我仍舊沒搞懂,最根本的從哪裡來就沒搞懂。當頁面發送請求,編碼到背景是什麼編碼呢?好吧,我預設的都是utf-8.背景接收參數後,可以在控制台列印出來,我也不清楚是什麼編碼。然後,就是資料庫問題。
在mysql資料庫,首先會設定mysql安裝的字元集為utf-8,然後在連接配接的jdbc上注明characterEncoding是utf-8.一直這樣統一下去,沒有出現亂碼。
連接配接oracle就出現問題了,我使用的一個已經安裝好的oracle資料庫。字元集是American,us7ascii.我插入和查詢的中文都是亂碼。百度了很久之後,還是進行轉碼工作。
關于java編碼,先看String中的幾個方法:
getBytes()
這裡先要搞清楚編碼(encode)和解碼(decode).下面是個人推測,沒有考證的解釋:
了解了編碼和解碼後,從一個字元串開始解析。
字元串str="中文",str是一串字元,通過str.getBytes()可以編碼成byte數組。通過new String(bytes)來解碼為字元串。下面是測試:
View Code
結果:
奇詭的是,雖然getBytes列印的byte數組内容看起來是一樣的,但此編碼結構卻是不同的。并不是一串字元通過某種字元集編碼,再解碼就可以還原的。這要看該字元是屬于何種編碼。中文字元隻有utf-8和gbk能夠存儲成功,别的編碼會出現漏碼像7位編碼之類的。而我要解決的就是中文亂碼問題。是以,中文編碼是關于utf-8和gbk的。
對于存儲于oracle的中文字元,采用iso-8859-1.是以,需要考慮的就是utf-8還是gbk轉儲為iso-8859-1.
經過測試,存儲的時候:p=new String(p.getBytes("gbk"),"iso-8859-1");而getBytes("utf-8")失敗。
查詢結果的時候:result = new String(str.getBytes("ISO-8859-1"),"gbk")可以将oracle的中文正常顯示。
附上我用oracle的字元集:
唯有不斷學習方能改變!
-- <b>Ryan Miao</b>