中文顯示問題一直是困擾我們的一個難題,不信你上google搜尋一下,這類的問題和解答可以說是鋪天蓋地,好多網站甚至將其提出來作為專題來討論,管中窺豹,可見一斑。
開始也曾為這個問題頭疼,上網查閱大量的資料和解決方案,終於找到了一種既簡單又好用的辦法,以JSP+MYSQL儲存為例,簡單介紹一下。
配置:
W2K+Resin+Mysql
當頁面<%@ page contentType="text/html;charset=gbk"%>使用GBK(或者GB2312)編碼後,頁面中的中文都可以正常顯示(<%out.println("能正常顯示中文嗎?");%>)。但是涉及到資料庫的存取時,您常常會看到令人頭疼的亂碼。輸出SQL執行的字串,例如:insert into table values('1','旺財','20','男'); 這時候可以看到顯示的都是中文,但是當你開啟資料庫查看記錄的時候看到還是亂碼,暈!為什嗎?如果這時候你從MYSQL控制台命令列下輸入上面的語句執行時,再查看資料庫記錄,咦!沒有問題呀,執行同樣的語句,為什麼得到不一樣的結果呢?看來JDBC是難脫其咎了。
簡而言之解決方案:
串連資料庫時:jdbc:mysql://localhost/test?user=root&password=&useUnicode=true&characterEncoding=ISO-8859-1",指明編碼為ISO-8859-1,我看了一下MYSQL的相關檔案,它預設的編碼就是ISO-8859-1,但是在這裡不指明的話還是有問題,中文仍舊不能正常顯示(到底為什麼其實我也不是很清楚)。這樣在往資料庫中存放的時候就正常了。
從資料庫中讀取資料時,如果用rs.getString("name")的話,亂碼又出來了,這還是一個編碼轉換的問題,下面給一個轉換函式:
<%
/********************************************
函數名:toGB
作 用:將ISO8859字元集轉換為GB2312字元集
解決資料庫中文顯示問題
參 數:iso ----要轉換的字串
傳回值: gb ----轉換後的字串
********************************************/
%>
<%! public String toGB(String iso)
{
String gb=null;
if (iso != null) {
try {
gb=new String(iso.getBytes("ISO-8859-1"),"GB2312");
} catch (Exception e) {
gb=null;
}
}
return gb;
}
%>
從資料庫中讀取資料時toGB(rs.getString("name"),那麼資料庫中的中文就會正常顯示了。