要解決JSP亂碼,首先就要了解JSP亂碼的原因
1.假設服務(wù)器安裝MYSQL時(shí)的會(huì )讓你選擇一種編碼,如果這種編碼與你的網(wǎng)頁(yè)不一致,可能就會(huì )造成JSP頁(yè)面亂碼
2.在PHPMYADMIN或mysql-front等系統 創(chuàng )建數據庫時(shí)會(huì )讓你選擇一種編碼,如果這種編碼與你的網(wǎng)頁(yè)不一致,也有可能造成JSP頁(yè)面亂碼
3.創(chuàng )建表時(shí)會(huì )讓你選擇一種編碼,如果這種編碼與你的網(wǎng)頁(yè)編碼不一致,也可能造成JSP頁(yè)面亂碼
4.創(chuàng )建表時(shí)添加字段是可以選擇編碼的,如果這種編碼與你的網(wǎng)頁(yè)編碼不一致,也可能造成JSP頁(yè)面亂碼
5.用戶(hù)提交JSP頁(yè)面的編碼與顯示數據的JSP頁(yè)面編碼不一致,就肯定會(huì )造成JSP頁(yè)面亂碼.
如用戶(hù)輸入資料的JSP頁(yè)面是big5碼, 顯示用戶(hù)輸入的JSP頁(yè)面卻是gb2312,這種100%會(huì )造成JSP頁(yè)面亂碼
6.字符集不正確
要注意:
1.平時(shí)你在某些網(wǎng)站看到的文字可能有幾種編碼, 如你看到一個(gè)繁體字,它有可能是big5編碼,也有 可能是utf-8編碼的,更有可能是gb碼的,沒(méi)錯,也就是說(shuō)有簡(jiǎn)體編碼的繁體字,也有繁體編碼的簡(jiǎn)體字,一定要了解這一點(diǎn).
如果你是做一個(gè)簡(jiǎn)體編碼的網(wǎng)頁(yè),編碼定為GB2312,如果有香港和臺灣地區的訪(fǎng)客提交繁體的信息,就可能會(huì )造成亂碼,解決方法就是(1)將網(wǎng)站編碼設為utf-8,這樣可以兼容世界上所有字符, (2)如果網(wǎng)站已經(jīng)運作了好久,已有很多舊數據,不能再更改簡(jiǎn)體中文的設定,那么建議將頁(yè)面的編碼設為GBK,
GBK與GB2312的區別就在于:GBK能比GB2312顯示更多的字符,要顯示簡(jiǎn)體碼的繁體字,就只能用GBK
7.JSP連接MYSQL數據庫語(yǔ)句指定的編碼不正確
8.JSP頁(yè)面沒(méi)有指定數據提交的編碼,就會(huì )造成亂碼:所以,JSP亂碼的原因無(wú)非就是以上幾種,知道原因之后,要解決JSP亂碼的方法也容易多了
我們一一來(lái)表達:
1.如果安裝mysql的編碼已不能更改,很多朋友是購買(mǎi)虛擬主機建立網(wǎng)站,無(wú)權更改MYSQL的安裝編碼,這一關(guān)我們可以跳過(guò),因為只要后面的步聚正確,一樣能解決亂碼問(wèn)題
2.修改數據庫編碼,如果是數據庫編碼不正確: 可以在phpmyadmin 執行如下命令: ALTER DATABASE `test` DEFAULT CHARACTER SET utf8 COLLATE utf8_bin
以上命令就是將test數據庫的編碼設為utf8
3.修改表的編碼:ALTER TABLE `category` DEFAULT CHARACTER SET utf8 COLLATE utf8_bin
以上命令就是將一個(gè)表category的編碼改為utf8
4.修改字段的編碼:
ALTER TABLE `test` CHANGE `dd` `dd` VARCHAR( 45 ) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL
以上命令就是將test表中 dd的字段編碼改為utf8
5.如果是這種情況容易解決,只需檢查下頁(yè)面,修改源文件的charset即可
, //這個(gè)正確就無(wú)問(wèn)題了
6.這種情況也是修改頁(yè)面charset即可,
7.在JSP連接數據庫的語(yǔ)句中,
private String url="jdbc:mysql://localhost/"+DB_NAME+" user="+LOGIN_NAME+"&password="+LOGIN_PASSWORD+"&characterEncoding=GBK"; //相鍵要看characterEncoding
8.這種亂碼的情況,只需在頁(yè)面開(kāi)頭加上request.setCharacterEncoding("GBK"); 指定提交的即可
注意:按照以上方法修改以后只能保證你新插入的數據不會(huì )亂碼,舉個(gè)例:如果你用戶(hù)已提交的數據是BIG5,你卻想通過(guò)以上方法改為可以在GB2312的網(wǎng)頁(yè)正確顯示是不可能的, 這種文字內碼的變換只能通過(guò)另寫(xiě)程序來(lái)解決,請WEB745.com其它相關(guān)文章
總結:先要判斷JSP亂碼是插入數據庫之后亂碼,還是JSP頁(yè)面剛提交過(guò)來(lái)就亂碼了,如果JSP剛接收上一頁(yè)面的數據顯示就亂碼了,肯定是字符集不對,可者沒(méi)有加request.setCharacterEncoding("GBK");
如果是數據庫的原因就參考上面的2,3,4種方法
聯(lián)系客服