JSP中文亂碼問(wèn)題終極解決方案解析_第1頁(yè)
JSP中文亂碼問(wèn)題終極解決方案解析_第2頁(yè)
JSP中文亂碼問(wèn)題終極解決方案解析_第3頁(yè)
JSP中文亂碼問(wèn)題終極解決方案解析_第4頁(yè)
JSP中文亂碼問(wèn)題終極解決方案解析_第5頁(yè)
已閱讀5頁(yè),還剩6頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、 HYPERLINK /beijiguangyong/archive/2012/03/31/2437124.html JSP中文亂碼問(wèn)題終極解決方案在介紹方法之前我們首先應(yīng)該清楚具體的問(wèn)題有哪些,筆者在本博客當(dāng)中論述的JSP中文亂碼問(wèn)題有如下幾個(gè)方面:頁(yè)面亂碼、參數(shù)亂碼、表單亂碼、源文件亂碼。下面來(lái)逐一解決其中的亂碼問(wèn)題。一、JSP頁(yè)面中文亂碼在JSP頁(yè)面中,中文顯示亂碼有兩種情況:一種是HTML中的中文亂碼,另一種是在JSP中動(dòng)態(tài)輸出的中文亂碼。先看一個(gè)JSP程序:java HYPERLINK /beijiguangyong/archive/2012/03/31/2437124.html o

2、 view plain view plain HYPERLINK /beijiguangyong/archive/2012/03/31/2437124.html o copy copy HYPERLINK /beijiguangyong/archive/2012/03/31/2437124.html o print print HYPERLINK /beijiguangyong/archive/2012/03/31/2437124.html o ? ?中文顯示示例這是一個(gè)中文顯示示例:上面這個(gè)JSP程序看起來(lái)好像是在頁(yè)面顯示幾句中文而且標(biāo)題也是中文。運(yùn)行后在瀏覽器中顯示如圖所示原因在于沒(méi)有在J

3、SP中指定頁(yè)面顯示的編碼,消除亂碼的解決方案很簡(jiǎn)單上面代碼中page命令修改成如下所示即可java HYPERLINK /beijiguangyong/archive/2012/03/31/2437124.html o view plain view plain HYPERLINK /beijiguangyong/archive/2012/03/31/2437124.html o copy copy HYPERLINK /beijiguangyong/archive/2012/03/31/2437124.html o print print HYPERLINK /beijiguangyong/

4、archive/2012/03/31/2437124.html o ? ?中文顯示示例這是一個(gè)中文顯示示例:再次運(yùn)行亂碼消失,原理就是向頁(yè)面指定編碼為GB2312,那么頁(yè)面就會(huì)按照此編碼來(lái)顯示,于是亂碼消失。二、URL傳遞參數(shù)中文亂碼一般情況下在使用get方法提交表單的時(shí)候傳遞的參數(shù)如果是中文的話很可能會(huì)出現(xiàn)亂碼。下面是一個(gè)示例程序java HYPERLINK /beijiguangyong/archive/2012/03/31/2437124.html o view plain view plain HYPERLINK /beijiguangyong/archive/2012/03/31/2

5、437124.html o copy copy HYPERLINK /beijiguangyong/archive/2012/03/31/2437124.html o print print HYPERLINK /beijiguangyong/archive/2012/03/31/2437124.html o ? ?URL傳遞參數(shù)中文處理示例請(qǐng)點(diǎn)擊這個(gè)鏈接你提交的參數(shù)為:上面這個(gè)JSP程序的功能就是通過(guò)一個(gè)URL鏈接向自身傳遞一個(gè)參數(shù),這個(gè)參數(shù)是中文字符串,這個(gè)程序的運(yùn)行效果如下圖對(duì)于URL傳遞中文參數(shù)亂碼這個(gè)問(wèn)題,其處理方法比較特殊,僅僅轉(zhuǎn)換這個(gè)中文字符串或者設(shè)置JSP頁(yè)面顯示編碼都是不能解

6、決問(wèn)題的,需要修改Tomcat服務(wù)器的配置文件才能解決問(wèn)題。在這里修改Tomcat的conf目錄下的server.xml配置文件,具體改后的代碼如下html HYPERLINK /beijiguangyong/archive/2012/03/31/2437124.html o view plain view plain HYPERLINK /beijiguangyong/archive/2012/03/31/2437124.html o copy copy HYPERLINK /beijiguangyong/archive/2012/03/31/2437124.html o print pri

7、nt HYPERLINK /beijiguangyong/archive/2012/03/31/2437124.html o ? ?在原來(lái)代碼中添加URI編碼設(shè)置URIEncoding=“gb2312”即可,重啟Tomcat服務(wù)器可以得到正確的頁(yè)面。其原理也和上面的情況類似,就是向程序指明編碼類型,然后顯示就正常了。三、表單提交中文亂碼對(duì)于表單的數(shù)據(jù)可以使用request.getParameter(“”)的方法獲取,但是當(dāng)表單中出現(xiàn)中文數(shù)據(jù)的時(shí)候就會(huì)出現(xiàn)亂碼。示例代碼如下java HYPERLINK /beijiguangyong/archive/2012/03/31/2437124.html

8、 o view plain view plain HYPERLINK /beijiguangyong/archive/2012/03/31/2437124.html o copy copy HYPERLINK /beijiguangyong/archive/2012/03/31/2437124.html o print print HYPERLINK /beijiguangyong/archive/2012/03/31/2437124.html o ? ?Form中文處理示例下面是表單內(nèi)容:用戶名:密碼:在上面的表單當(dāng)中想AcceptFormCharset這個(gè)頁(yè)面提價(jià)兩項(xiàng)數(shù)據(jù),下面是Accep

9、tFormCharset.jsp的內(nèi)容:java HYPERLINK /beijiguangyong/archive/2012/03/31/2437124.html o view plain view plain HYPERLINK /beijiguangyong/archive/2012/03/31/2437124.html o copy copy HYPERLINK /beijiguangyong/archive/2012/03/31/2437124.html o print print HYPERLINK /beijiguangyong/archive/2012/03/31/243712

10、4.html o ? ?Form中文亂碼下面是表單提交以后用request取到的表單數(shù)據(jù):%StringuserName=request.getParameter(userName);Stringpassword=request.getParameter(password);out.println(表單輸入userName的值:+userName+);out.println(表單輸入password的值:+password+);%在上面的程序中,如果表單輸入沒(méi)有中文,則可以正常的顯示當(dāng)輸入的數(shù)據(jù)中有中文的時(shí)候,得到的結(jié)果如圖所示。產(chǎn)生種結(jié)果的原因是Tomcat中對(duì)于post方法提交的表單采用的

11、默認(rèn)編碼為ISO-8859-1,而這種編碼格式不支持中文字符。對(duì)于這個(gè)問(wèn)題可以采用轉(zhuǎn)換編碼格式的方法來(lái)解決,現(xiàn)在對(duì)AcceptFromCharset這個(gè)頁(yè)面改動(dòng)如下:java HYPERLINK /beijiguangyong/archive/2012/03/31/2437124.html o view plain view plain HYPERLINK /beijiguangyong/archive/2012/03/31/2437124.html o copy copy HYPERLINK /beijiguangyong/archive/2012/03/31/2437124.html o

12、print print HYPERLINK /beijiguangyong/archive/2012/03/31/2437124.html o ? ?Form中文亂碼下面是表單提交以后用request取到的表單數(shù)據(jù):%StringuserName=request.getParameter(userName);Stringpassword=request.getParameter(password);out.println(表單輸入userName的值:+newString(userName.getBytes(ISO-8859-1),gb2312)+);out.println(表單輸入passw

13、ord的值:+newString(password.getBytes(ISO-8859-1),gb2312)+);%經(jīng)過(guò)這樣的轉(zhuǎn)換編碼以后,所有的中文輸入都可以用request對(duì)象正常取出。在上面這個(gè)程序中,第四行和第五行是轉(zhuǎn)換編碼格式的關(guān)鍵,先從ISO-8859-1格式的字符串中取出字節(jié)內(nèi)容,然后在用GB2312的編碼格式重新構(gòu)造一個(gè)新的字符串。這樣就可以支持中文變淡輸入的正常取值和顯示。改進(jìn)以后程序運(yùn)行結(jié)果如下經(jīng)過(guò)上面的更改編碼格式的處理,表單的中文輸入亂碼問(wèn)題已經(jīng)得到解決。但是如果上面的表單中的輸入項(xiàng)不止是兩個(gè),那么每個(gè)輸入項(xiàng)都需要進(jìn)行編碼轉(zhuǎn)換,那樣就很麻煩了。這是我們就用到了大名鼎鼎的

14、過(guò)濾器filter了。關(guān)于這里的內(nèi)容大致的思慮和上面的一樣具體做法請(qǐng)參照筆者的 HYPERLINK /beijiguangyong/article/details/7414247 t _blank 另一篇文章。四、Eclipse中JSP文件中文亂碼在Eclipse或者M(jìn)yEclipse中由于默認(rèn)的JSP編碼格式為ISO-8859-1,所以當(dāng)打開(kāi)由其他編輯器編輯的JSP文件時(shí)會(huì)出現(xiàn)亂碼,如圖所示對(duì)于這個(gè)問(wèn)題我們只需要更改一下Eclipse或者是MyEclipse中對(duì)JSP的默認(rèn)編碼就可以了,修改的地方(我的MyEclipse版本為11)如圖所示PS在Eclipse或者M(jìn)yEclipse當(dāng)中JSP

15、文件默認(rèn)的編碼為ISO-8859-1,所以在JSP代碼中間如果出現(xiàn)中文就不能保存,例如如下代碼java HYPERLINK /beijiguangyong/archive/2012/03/31/2437124.html o view plain view plain HYPERLINK /beijiguangyong/archive/2012/03/31/2437124.html o copy copy HYPERLINK /beijiguangyong/archive/2012/03/31/2437124.html o print print HYPERLINK /beijiguangyon

16、g/archive/2012/03/31/2437124.html o ? ?中文顯示示例這是一個(gè)中文顯示示例:修改后在保存的時(shí)候會(huì)提示如下:現(xiàn)這個(gè)提示的原因在于JSP源文件中有ISO=8859-1編碼無(wú)法識(shí)別的中文字符,對(duì)于這個(gè)問(wèn)題,解決辦法就是在JSP頁(yè)面中聲明頁(yè)面編碼格式即可。聲明后代碼如下:java HYPERLINK /beijiguangyong/archive/2012/03/31/2437124.html o view plain view plain HYPERLINK /beijiguangyong/archive/2012/03/31/2437124.html o cop

17、y copy HYPERLINK /beijiguangyong/archive/2012/03/31/2437124.html o print print HYPERLINK /beijiguangyong/archive/2012/03/31/2437124.html o ? ?中文顯示示例這是一個(gè)中文顯示示例:其中第一行中pageEncoding=“gb2312”指明了JSP頁(yè)面編碼采用GB2312,這樣就可以正常保存JSP的源文件了。遇到問(wèn)題首先分析問(wèn)題出現(xiàn)的原因,只有知道了原因才能去解決,學(xué)習(xí)分析問(wèn)題的來(lái)源遠(yuǎn)比解決這個(gè)問(wèn)題重要的多。亂碼問(wèn)題的原因就是程序(Eclipse也好,瀏覽器也

18、罷)的編碼沒(méi)有和編程人員的編碼進(jìn)行統(tǒng)一,(就像你和一個(gè)不懂中文的人用中文交流他當(dāng)然不懂了)那么解決這個(gè)問(wèn)題只需要將編程人員想要的編碼告訴程序就可以了,以上解決亂碼問(wèn)題的種種方法都可以說(shuō)是一種聲明編碼的過(guò)程,也就是說(shuō)亂碼問(wèn)題終極解決方案就是:轉(zhuǎn)碼。這里的轉(zhuǎn)碼要么是編程人員手動(dòng)轉(zhuǎn),要么就是聲明一下讓程序去轉(zhuǎn),換句話說(shuō)就是:和不懂中文的交流,要么讓他學(xué)中文,要么你就去學(xué)習(xí)他的語(yǔ)言。古今名言敏而好學(xué),不恥下問(wèn)孔子業(yè)精于勤,荒于嬉;行成于思,毀于隨韓愈興于詩(shī),立于禮,成于樂(lè)孔子己所不欲,勿施于人孔子讀書破萬(wàn)卷,下筆如有神杜甫讀書有三到,謂心到,眼到,口到朱熹立身以立學(xué)為先,立學(xué)以讀書為本歐陽(yáng)修讀萬(wàn)卷書,行萬(wàn)里路劉彝黑發(fā)不知勤學(xué)早,白首方悔讀書遲顏真卿書卷多情似故人,晨昏

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論