1、在jsp中,字符集由<%@ page language="java" contentType="text/html;charset=GBK"%>來指定,如果處理中文,需指定為gbk。所以提交的數(shù)據(jù)全部都使用gbk編碼;
2、在java中,從jsp提交過來的數(shù)據(jù)是gbk編碼的,而java默認(rèn)的處理方式是使用ISO-8859-1編碼,所以若在java中能顯示jsp提交過來的gbk編碼方式的數(shù)據(jù),就要進(jìn)行一個(gè)轉(zhuǎn)換:將gbk轉(zhuǎn)換為ISO-8859-1,這樣數(shù)據(jù)就可正常顯示。
3、如果要將jsp提交的數(shù)據(jù)經(jīng)過java后臺(tái)處理,然后放入數(shù)據(jù)庫中,就又多了一個(gè)數(shù)據(jù)編碼方式:數(shù)據(jù)庫的數(shù)據(jù)編碼方式。以mysql為例,默認(rèn)字符集為latin,所以若將gbk的數(shù)據(jù)放入,必然出現(xiàn)亂碼,所以首先應(yīng)改變數(shù)據(jù)庫的編碼方式為gbk。
綜上,簡單的設(shè)置方法如下:
jsp?(gbk)???? ---->???? java(ISO-8859-1)? -------> mysql(gbk)
??????????????????????????????????????????????????????????????? 轉(zhuǎn)換
這樣設(shè)置之后,還有一種情況會(huì)出現(xiàn)亂碼:當(dāng)你在jsp端提交一個(gè)id號(hào),然后在java處理端通過id號(hào)得到數(shù)據(jù)庫中的gbk(漢字)數(shù)據(jù),這是就會(huì)出現(xiàn)亂碼,因?yàn)閖ava處理的是ISO-8859-1,你在java到mysql中有了一個(gè)ISO-8859-1到gbk的轉(zhuǎn)換,而這些數(shù)據(jù)本身就是ISO-8859-1,所以轉(zhuǎn)換后就出現(xiàn)問題了。
解決辦法:將在java中處理的gbk數(shù)據(jù)轉(zhuǎn)換為ISO-8859-1即可。
總之:在jsp,java,mysql三者之間的編碼方式必須統(tǒng)一,不能錯(cuò)誤的轉(zhuǎn)換或者不轉(zhuǎn)換。