




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、JSP中文亂碼問題終極解決方案在介紹方法之前我們首先應(yīng)該清楚具體的問題有哪些,筆者在本博客當(dāng)中論述的JSP中文亂碼問題有如下幾個(gè)方面:頁面亂碼、參數(shù)亂碼、表單亂碼、源文件亂碼。下面來逐一解決其中的亂碼問題。一、JSP頁面中文亂碼在JSP頁面中,中文顯示亂碼有兩種情況:一種是HTML中的中文亂碼,另一種是在JSP中動態(tài)輸出的中文亂碼。先看一個(gè)JSP程序:java view plaincopyprint?1. <% page language="java" import="java.util.*" %
2、> 2. <html> 3. <head> 4. <title>中文顯示示例</title> 5. 6. </head> 7. <body> 8. &
3、#160; 這是一個(gè)中文顯示示例: 9. <% 10. String str = "中文" 11. out.print(str); 12. %&g
4、t; 13. </body> 14. </html> 上面這個(gè)JSP程序看起來好像是在頁面顯示幾句中文而且標(biāo)題也是中文。運(yùn)行后在瀏覽器中顯示如圖所示原因在于沒有在JSP中指定頁面顯示的編碼,消除亂碼的解決方案很簡單上面代碼中page命令修改成如下所示即可 java view plaincopyprint?1. <% page language="java" import="java.
5、util.*" contentType="text/html; charset=GB2312" %> 2. <html> 3. <head> 4. <title>中文顯示示例</title> 5. 6. </head>
6、 7. <body> 8. 這是一個(gè)中文顯示示例: 9. <% 10. String str = "中文" 11.
7、60; out.print(str); 12. %> 13. </body> 14. </html> 再次運(yùn)行亂碼消失,原理就是向頁面指定編碼為GB2312,那么頁面就會按照此編碼來顯示,于是亂碼消失。二、URL傳遞參數(shù)中文亂碼一般情況下在使用get方法提交表單的時(shí)候傳遞的參數(shù)如果是中文的話很可能會出現(xiàn)亂碼。下面是一個(gè)示例程序java view pl
8、aincopyprint?1. <% page language="java" import="java.util.*" contentType="text/html;charset=gb2312"%> 2. <html> 3. <head> 4.
9、160;<title>URL傳遞參數(shù)中文處理示例</title> 5. </head> 6. <% 7. String param = request.getParameter("param"); 8.
10、 %> 9. <body> 10. <a href="URLCharset.jsp?param='中文'">請點(diǎn)擊這個(gè)鏈接</a><br> 11. 你提交的參數(shù)為:<
11、%=param%> 12. </body> 13. </html> 上面這個(gè)JSP程序的功能就是通過一個(gè)URL鏈接向自身傳遞一個(gè)參數(shù),這個(gè)參數(shù)是中文字符串,這個(gè)程序的運(yùn)行效果如下圖對于URL傳遞中文參數(shù)亂碼這個(gè)問題,其處理方法比較特殊,僅僅轉(zhuǎn)換這個(gè)中文字符串或者設(shè)置JSP頁面顯示編碼都是不能解決問題的,需要修改Tomcat服務(wù)器的配置文件才能解決問題。在這里修改Tomcat的conf目錄下的server.xml配置文件,具體改后的代碼如下html vi
12、ew plaincopyprint?1. <Connector port="8080" protocol="HTTP/1.1" URIEncoding="gb2312" 2. connectionTimeout="20000" 3. &
13、#160; redirectPort="8443" /> 在原來代碼中添加URI編碼設(shè)置URIEncoding=“gb2312”即可,重啟Tomcat服務(wù)器可以得到正確的頁面。其原理也和上面的情況類似,就是向程序指明編碼類型,然后顯示就正常了。三、表單提交中文亂碼對于表單的數(shù)據(jù)可以使用request.getParameter(“”)的方法獲取,但是當(dāng)表單中出現(xiàn)中文數(shù)據(jù)的時(shí)候
14、就會出現(xiàn)亂碼。示例代碼如下java view plaincopyprint?1. <% page language="java" import="java.util.*" contentType="text/html;charset=gb2312"%> 2. <html> 3. <head> 4. &
15、#160; <title>Form中文處理示例</title> 5. </head> 6. <body> 7. <font size="2"> 8.
16、 下面是表單內(nèi)容: 9. <form action="AcceptFormCharset.jsp" method="post"> 10.
17、; 用戶名:<input type="text" name="userName" size="10"/> 11.
18、160;密 碼:<input type="password" name="password" size="10"/> 12. <input type="submit" value="提交">
19、 13. </form> 14. </font> 15. </body> 16. </html> 在上面的表單當(dāng)中想AcceptF
20、ormCharset這個(gè)頁面提價(jià)兩項(xiàng)數(shù)據(jù),下面是AcceptFormCharset.jsp的內(nèi)容:java view plaincopyprint?1. <% page language="java" import="java.util.*" 2. contentType="text/html;charset=gb2312"%> 3. <html> 4. &
21、#160; <head> 5. <title>Form中文亂碼</title> 6. </head> 7. <body> 8. <fon
22、t size="2"> 下面是表單提交以后用request取到的表單數(shù)據(jù):<br> 9. <% 10. String userName
23、= request.getParameter("userName"); 11. String password = request.getParameter("password"); 12.
24、0; out.println("表單輸入userName的值:" + userName + "<br>"); 13. out.println("表單輸入password的值:"
25、160;+ password + "<br>"); 14. %> 15. </font> 16. </body>
26、60;17. </html> 在上面的程序中,如果表單輸入沒有中文,則可以正常的顯示當(dāng)輸入的數(shù)據(jù)中有中文的時(shí)候,得到的結(jié)果如圖所示。產(chǎn)生種結(jié)果的原因是Tomcat中對于post方法提交的表單采用的默認(rèn)編碼為ISO-8859-1,而這種編碼格式不支持中文字符。對于這個(gè)問題可以采用轉(zhuǎn)換編碼格式的方法來解決,現(xiàn)在對AcceptFromCharset這個(gè)頁面改動如下:java view plaincopyprint?1. <% page language="java" import="java.util
27、.*" 2. contentType="text/html;charset=gb2312"%> 3. <html> 4. <head> 5. <title>Form中文亂碼</title> 6.
28、60; </head> 7. <body> 8. <font size="2"> 下面是表單提交以后用request取到的表單數(shù)據(jù):<br> 9.
29、 <% 10. String userName = request.getParameter("userName"); 11. &
30、#160; String password = request.getParameter("password"); 12. out.println("表單輸入userName的值:" + new String(userName.getBytes("ISO-8859-
31、1"), "gb2312")+ "<br>"); 13. out.println("表單輸入password的值:" + new String(password.getBytes("ISO-8859-1"), "g
32、b2312")+ "<br>"); 14. %> 15. </font> 16. </body> 17. </h
33、tml> 經(jīng)過這樣的轉(zhuǎn)換編碼以后,所有的中文輸入都可以用request對象正常取出。在上面這個(gè)程序中,第四行和第五行是轉(zhuǎn)換編碼格式的關(guān)鍵,先從ISO-8859-1格式的字符串中取出字節(jié)內(nèi)容,然后在用GB2312的編碼格式重新構(gòu)造一個(gè)新的字符串。這樣就可以支持中文變淡輸入的正常取值和顯示。改進(jìn)以后程序運(yùn)行結(jié)果如下經(jīng)過上面的更改編碼格式的處理,表單的中文輸入亂碼問題已經(jīng)得到解決。但是如果上面的表單中的輸入項(xiàng)不止是兩個(gè),那么每個(gè)輸入項(xiàng)都需要進(jìn)行編碼轉(zhuǎn)換,那樣就很麻煩了。這是我們就用到了大名鼎鼎的過濾器filter了。關(guān)于這里的內(nèi)容大致的思慮和上面的一樣具體做法請參照筆者的
34、另一篇文章。四、Eclipse中JSP文件中文亂碼在Eclipse或者M(jìn)yEclipse中由于默認(rèn)的JSP編碼格式為ISO-8859-1,所以當(dāng)打開由其他編輯器編輯的JSP文件時(shí)會出現(xiàn)亂碼,如圖所示對于這個(gè)問題我們只需要更改一下Eclipse或者是MyEclipse中對JSP的默認(rèn)編碼就可以了,修改的地方(我的MyEclipse版本為11)如圖所示PS在Eclipse或者M(jìn)yEclipse當(dāng)中JSP文件默認(rèn)的編碼為ISO-8859-1,所以在JSP代碼中間如果出現(xiàn)中文就不能保存,例如如下代碼java view plaincopyprint?1. <% page lan
35、guage="java" import="java.util.*" %> 2. <html> 3. <head> 4. <title>中文顯示示例</title> 5. 6. </head>
36、160;7. <body> 8. 這是一個(gè)中文顯示示例: 9. <% 10. String str = "中文" 11. out.print(str); 12. %> 13. </body> 14. </html> 修改后在保存的時(shí)候會提示如下:現(xiàn)這個(gè)提示的原因在于JSP源文件中有ISO=8859-1編碼無法識別的中文字符,對
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 薊州區(qū)公司注冊管理辦法
- 蚌埠市在建工程管理辦法
- 行政部管理目標(biāo)管理辦法
- 西紅柿公司職工管理辦法
- 衢江區(qū)漁業(yè)養(yǎng)殖管理辦法
- 西南大學(xué)教研室管理辦法
- 西藏公積金繳納管理辦法
- 試驗(yàn)檢測部考核管理辦法
- 財(cái)務(wù)部財(cái)務(wù)管理暫行辦法
- 貴州新型儲能項(xiàng)目管理暫行辦法
- 2025云南省初中學(xué)業(yè)水平考試數(shù)學(xué)
- 2025年 長春中醫(yī)藥大學(xué)附屬醫(yī)院招聘考試筆試試題附答案
- 學(xué)校關(guān)工委管理制度
- 三年級數(shù)學(xué)計(jì)算題專項(xiàng)練習(xí)及答案
- 出納應(yīng)聘試題及答案
- 2025至2030中國清分機(jī)行業(yè)發(fā)展趨勢分析與未來投資戰(zhàn)略咨詢研究報(bào)告
- DB31-T 1593-2025 基于自動駕駛功能的公交運(yùn)營技術(shù)要求
- 2024年佛山市南海區(qū)圖書館招聘真題
- 辦公室可行性研究報(bào)告范文
- 承包土地有償退出協(xié)議書
- 2025菜鳥驛站轉(zhuǎn)讓合同協(xié)議模板
評論
0/150
提交評論