但是從JSP寫入到MySQL的中文內容都成了亂碼,並且再讀出來的時候也顯示為“??”,在這裡應該出現了編碼轉換過程中的字元資訊丟失。鬱悶的是,我在命令列視窗中登陸到MySQL後,執行如“INSERT INTO customerVALUES('字元',...)”這樣的語句時,寫入到資料表中的中文內容又是顯示正常的!!!資料庫使用的字元集是utf8。
碰壁多次,終於發現一條解決問題的路徑:查看MySQL手冊的時候,看到一條這樣的語句:Toallow multiple character sets to be sent from the client, the "UTF-8"encoding should be used, either by configuring "utf8" as the defaultserver character set, or by configuring the JDBC driver to use "UTF-8"through the characterEncoding property.
String s2 = new String(s1.getBytes("gb2312"),"ISO-8859-1")進行轉碼,其中s1為中文字串.然後再寫入到資料庫一切顯示正常。
為解決這個問題查看了n多資料,現作一個總結:由於字元集和字元編碼方式的不同,在OS以及程式之間傳遞資料(尤其是multiple character sets中的資料)時便會產生亂碼以及字元資訊的丟失.解決這個問題的關鍵便是瞭解資料輸出端和接收端使用的字元集和字元編碼方式,如果這兩種編碼方式不同,便需要在資料出口或入口處進行 轉碼。一般的說,在編寫代碼,編譯,以及運行期間都會字元資料的傳遞,因此需要特別小心。
在編寫代碼的時候,你可能會使用某種開發工具,例如我正在使用的Eclipse.或許在寫的時候一切正常,可是一旦儲存後再次開啟文檔,所有的中文字元都變成了亂碼。這是因為在編寫的時候,這些字元資料都在記憶體的某個stream中,ok,這沒問題,可是儲存的時候這個stream中的資料會被寫入到硬碟,使用的就是你的開發工具預設的編碼方式,如果很不幸你的開發工具預設編碼方式是ISO-8859-1,中文字元資訊就不能正確地儲存。Eclipse中可以這樣查看並修改預設字元編碼方式:Project->Properties->info,這裡有"default encoding for text file"。如果設定為GBK,那麼編寫代碼並儲存這關就過了。