解決jsp+MysQL輸入和輸出中文亂碼的方法!
當(dāng)使用JSP頁面將中文數(shù)據(jù)添加到MySql數(shù)據(jù)庫中的時(shí)候發(fā)現(xiàn)變?yōu)閬y碼,或者從mysql中讀取中文的時(shí)候出現(xiàn)亂碼,這些問題根源都是由于字符編碼不一致造成的。要知道病源是什么我們才能對(duì)癥下藥,所以我將問題產(chǎn)生的過程簡單描述一下(如有不對(duì)望高人賜教)
?我們以一個(gè)從form表單讀取數(shù)據(jù)并寫入mysql數(shù)據(jù)庫的例子來講解;
HTML頁面參數(shù)—(以瀏覽器的編碼方式發(fā)送)—》JSP頁面—(以JSP定義的編碼方式被編譯)—》被JSP引擎編譯為*.class文件——》在JSP容器中運(yùn)行——》傳遞給Mysql數(shù)據(jù)庫—(以數(shù)據(jù)庫的編碼方式讀取數(shù)據(jù)并存儲(chǔ))—》讀取Mysql—(以數(shù)據(jù)庫的編碼方式讀取)—》JSP頁面接受后在瀏覽器中顯示(以瀏覽器編碼方式解碼顯示);
注意:這里的“瀏覽器編碼”“JSP頁面編碼”“JSP頁面輸出編碼”“JSP頁面輸入編碼”“數(shù)據(jù)庫的編碼”可能存在潛在的不一直,當(dāng)它們中的任意一個(gè)不相同的時(shí)候就會(huì)出現(xiàn)亂碼;就好像傳話游戲一樣,張三要把話傳給李四,李四把他聽到的傳給王五,要讓王五知道張三說的什么就需要他們?nèi)齻€(gè)人使用的相同語言,如果李四是個(gè)火星人,他當(dāng)然聽不懂張三說什么,然后他還不厚道的對(duì)王五說火星話(亂碼),結(jié)果王五就只能聽到亂碼了。(比喻比較汗~~^_^!)
好了,現(xiàn)在我們就依次把各個(gè)編碼方式改為相同就可以了;
//-------------------------瀏覽器編碼-----------------
<html>
? <head><meta http-equiv="Content-Type" content="text/html; charset=GB2312"></head>
</html>
//---------------------------JSP頁面-------------------
<%@ page pageEncoding="GB2312"%>??????????????????????????? //JSP頁面編碼:
<%@ page contentType="text/html;charset=gb2312"%>????//JSP頁面輸出編碼:
<% request.setCharacterEncoding("gb2312");?%>?????????????? //JSP頁面輸入編碼:
//------------------------MySql編碼-------------------
Connection connect = java.sql.DriverManager.getConnection(
"jdbc:mysql://localhost/mydb?user=登陸帳號(hào)&password=你的密碼&useUnicode=true&characterEncoding=gb2312");
//-------------------------------------------------------
注意:gb2312的寫法(紅色部分) 在瀏覽器和數(shù)據(jù)庫中的寫法要區(qū)分!
以上配置測試成功!(tomcat5.5+MySql5.0)
//另外看了網(wǎng)上的很多文章,比如通過函數(shù)轉(zhuǎn)碼啊~~改配置文件啊~~都不如這樣來的簡便且成功率高!
推薦!
?我們以一個(gè)從form表單讀取數(shù)據(jù)并寫入mysql數(shù)據(jù)庫的例子來講解;
HTML頁面參數(shù)—(以瀏覽器的編碼方式發(fā)送)—》JSP頁面—(以JSP定義的編碼方式被編譯)—》被JSP引擎編譯為*.class文件——》在JSP容器中運(yùn)行——》傳遞給Mysql數(shù)據(jù)庫—(以數(shù)據(jù)庫的編碼方式讀取數(shù)據(jù)并存儲(chǔ))—》讀取Mysql—(以數(shù)據(jù)庫的編碼方式讀取)—》JSP頁面接受后在瀏覽器中顯示(以瀏覽器編碼方式解碼顯示);
注意:這里的“瀏覽器編碼”“JSP頁面編碼”“JSP頁面輸出編碼”“JSP頁面輸入編碼”“數(shù)據(jù)庫的編碼”可能存在潛在的不一直,當(dāng)它們中的任意一個(gè)不相同的時(shí)候就會(huì)出現(xiàn)亂碼;就好像傳話游戲一樣,張三要把話傳給李四,李四把他聽到的傳給王五,要讓王五知道張三說的什么就需要他們?nèi)齻€(gè)人使用的相同語言,如果李四是個(gè)火星人,他當(dāng)然聽不懂張三說什么,然后他還不厚道的對(duì)王五說火星話(亂碼),結(jié)果王五就只能聽到亂碼了。(比喻比較汗~~^_^!)
好了,現(xiàn)在我們就依次把各個(gè)編碼方式改為相同就可以了;
//-------------------------瀏覽器編碼-----------------
<html>
? <head><meta http-equiv="Content-Type" content="text/html; charset=GB2312"></head>
</html>
//---------------------------JSP頁面-------------------
<%@ page pageEncoding="GB2312"%>??????????????????????????? //JSP頁面編碼:
<%@ page contentType="text/html;charset=gb2312"%>????//JSP頁面輸出編碼:
<% request.setCharacterEncoding("gb2312");?%>?????????????? //JSP頁面輸入編碼:
//------------------------MySql編碼-------------------
Connection connect = java.sql.DriverManager.getConnection(
"jdbc:mysql://localhost/mydb?user=登陸帳號(hào)&password=你的密碼&useUnicode=true&characterEncoding=gb2312");
//-------------------------------------------------------
注意:gb2312的寫法(紅色部分) 在瀏覽器和數(shù)據(jù)庫中的寫法要區(qū)分!
以上配置測試成功!(tomcat5.5+MySql5.0)
//另外看了網(wǎng)上的很多文章,比如通過函數(shù)轉(zhuǎn)碼啊~~改配置文件啊~~都不如這樣來的簡便且成功率高!
推薦!
posted on 2006-09-24 11:24 銀河海盜 閱讀(1579) 評(píng)論(0) 編輯 收藏 所屬分類: WEB