首先實現了一個StringConvert bean(GBtoISO()和ISOtoGB()兩個方法),解決了與MySQL數據庫交互的時候的部分中文亂碼問題:在JSP程序中讀取MySQL的中文內容,用這兩個方法可以解決亂碼問題。
但是從JSP寫入到MySQL的中文內容都成了亂碼,並且再讀出來的時候也顯示為“??”,在這裡應該出現了編碼轉換過程中的字符信息丟失。郁悶的是,我在命令行窗口中登陸到MySQL後,執行如“INSERT INTO customer VALUES('字符',...)”這樣的語句時,寫入到數據表中的中文內容又是顯示正常的!!!數據庫使用的字符集是utf8。
碰壁多次,終於發現一條解決問題的路徑:查看MySQL手冊的時候,看到一條這樣的語句:To allow multiple character sets to be sent from the client, the "UTF-8" encoding should be used, either by configuring "utf8" as the default server character set, or by configuring the JDBC driver to use "UTF-8" through the characterEncoding property.
此外,在查閱《MySQL權威指南》時,發現在查詢語句中可以使用這樣的語法將字符串轉換到一個給定的字符集:_charset str。
其中charset必須是服務器支持的某個字符集。在本例中,shopdb數據庫使用的默認字符集是utf8,於是開始測試:
先輸入INSERT INTO publish Values('8',_gb2312 '高等教育出版社') 寫入後中文變成“??”
再試INSERT INTO publish Values('8',_gbk '高等教育出版社') 結果同上
INSERT INTO publish Values('8',_utf8 '高等教育出版社') 這下更干脆,什麼都沒有!!
快瘋了!!沒辦法,用show character set;命令查看MySQL支持的字符集,心想我都試一遍總有一個能成功吧。浏覽了一下,發現沒有幾個熟悉的字符集,就只剩下一個latin1(ISO-8859-1)比較常見了,不會是它吧,一試之下果然便是。
INSERT INTO publish Values('8',_latin1 '高等教育出版社') 輸入中文能夠正確顯示。
這下總算找到方法了,把Tomcat下配置的數據庫連接池的url改為"...characterEncoding=UTF-8",然後把寫入數據庫的中文內容用
String s2 = new String(s1.getBytes("gb2312"),"ISO-8859-1")進行轉碼,其中s1為中文字符串.然後再寫入到數據庫一切顯示正常。