一、JSP頁面中文亂碼
在JSP頁面中,中文顯示亂碼有兩種情況:一種是HTML中的中文亂碼,另一種是在JSP中動態(tài)輸出的中文亂碼。
先看一個JSP程序:
%@ page language="java" import="java.util.*" %>
html>
head>
title>中文顯示示例/title>
/head>
body>
這是一個中文顯示示例:
%
String str = "中文";
out.print(str);
%>
/body>
/html>
上面這個JSP程序看起來好像是在頁面顯示幾句中文而且標題也是中文。運行后在瀏覽器中顯示如圖所示
原因在于沒有在JSP中指定頁面顯示的編碼,消除亂碼的解決方案很簡單上面代碼中page命令修改成如下所示即可
%@ page language="java" import="java.util.*" contentType="text/html; charset=GB2312" %>
html>
head>
title>中文顯示示例/title>
/head>
body>
這是一個中文顯示示例:
%
String str = "中文";
out.print(str);
%>
/body>
/html>
再次運行亂碼消失,原理就是向頁面指定編碼為GB2312,那么頁面就會按照此編碼來顯示,于是亂碼消失。
二、URL傳遞參數(shù)中文亂碼
一般情況下在使用get方法提交表單的時候傳遞的參數(shù)如果是中文的話很可能會出現(xiàn)亂碼。
下面是一個示例程序
%@ page language="java" import="java.util.*" contentType="text/html;charset=gb2312"%>
html>
head>
title>URL傳遞參數(shù)中文處理示例/title>
/head>
%
String param = request.getParameter("param");
%>
body>
a href="URLCharset.jsp?param='中文'">請點擊這個鏈接/a>br>
你提交的參數(shù)為:%=param%>
/body>
/html>
上面這個JSP程序的功能就是通過一個URL鏈接向自身傳遞一個參數(shù),這個參數(shù)是中文字符串,這個程序的運行效果如下圖
對于URL傳遞中文參數(shù)亂碼這個問題,其處理方法比較特殊,僅僅轉(zhuǎn)換這個中文字符串或者設(shè)置JSP頁面顯示編碼都是不能解決問題的,需要修改Tomcat服務(wù)器的配置文件才能解決問題。在這里修改Tomcat的conf目錄下的server.xml配置文件,具體改后的代碼如下
Connector port="8080" protocol="HTTP/1.1" URIEncoding="gb2312"
connectionTimeout="20000"
redirectPort="8443" />
在原來代碼中添加URI編碼設(shè)置URIEncoding=“gb2312”即可,重啟Tomcat服務(wù)器可以得到正確的頁面。其原理也和上面的情況類似,就是向程序指明編碼類型,然后顯示就正常了。
三、表單提交中文亂碼
對于表單的數(shù)據(jù)可以使用request.getParameter(“”)的方法獲取,但是當表單中出現(xiàn)中文數(shù)據(jù)的時候就會出現(xiàn)亂碼。
示例代碼如下
%@ page language="java" import="java.util.*" contentType="text/html;charset=gb2312"%>
html>
head>
title>Form中文處理示例/title>
/head>
body>
font size="2">
下面是表單內(nèi)容:
form action="AcceptFormCharset.jsp" method="post">
用戶名:input type="text" name="userName" size="10"/>
密 碼:input type="password" name="password" size="10"/>
input type="submit" value="提交">
/form>
/font>
/body>
/html>
在上面的表單當中想AcceptFormCharset這個頁面提價兩項數(shù)據(jù),下面是AcceptFormCharset.jsp的內(nèi)容:
%@ page language="java" import="java.util.*"
contentType="text/html;charset=gb2312"%>
html>
head>
title>Form中文亂碼/title>
/head>
body>
font size="2"> 下面是表單提交以后用request取到的表單數(shù)據(jù):br>
%
String userName = request.getParameter("userName");
String password = request.getParameter("password");
out.println("表單輸入userName的值:" + userName + "br>");
out.println("表單輸入password的值:" + password + "br>");
%>
/font>
/body>
/html>
在上面的程序中,如果表單輸入沒有中文,則可以正常的顯示當輸入的數(shù)據(jù)中有中文的時候,得到的結(jié)果如圖所示。
產(chǎn)生種結(jié)果的原因是Tomcat中對于post方法提交的表單采用的默認編碼為ISO-8859-1,而這種編碼格式不支持中文字符。對于這個問題可以采用轉(zhuǎn)換編碼格式的方法來解決,現(xiàn)在對AcceptFromCharset這個頁面改動如下:
%@ page language="java" import="java.util.*"
contentType="text/html;charset=gb2312"%>
html>
head>
title>Form中文亂碼/title>
/head>
body>
font size="2"> 下面是表單提交以后用request取到的表單數(shù)據(jù):br>
%
String userName = request.getParameter("userName");
String password = request.getParameter("password");
out.println("表單輸入userName的值:" + new String(userName.getBytes("ISO-8859-1"), "gb2312")+ "br>");
out.println("表單輸入password的值:" + new String(password.getBytes("ISO-8859-1"), "gb2312")+ "br>");
%>
/font>
/body>
/html>
經(jīng)過這樣的轉(zhuǎn)換編碼以后,所有的中文輸入都可以用request對象正常取出。在上面這個程序中,第四行和第五行是轉(zhuǎn)換編碼格式的關(guān)鍵,先從ISO-8859-1格式的字符串中取出字節(jié)內(nèi)容,然后在用GB2312的編碼格式重新構(gòu)造一個新的字符串。這樣就可以支持中文變淡輸入的正常取值和顯示。改進以后程序運行結(jié)果如下
經(jīng)過上面的更改編碼格式的處理,表單的中文輸入亂碼問題已經(jīng)得到解決。但是如果上面的表單中的輸入項不止是兩個,那么每個輸入項都需要進行編碼轉(zhuǎn)換,那樣就很麻煩了。這是我們就用到了大名鼎鼎的過濾器filter了。關(guān)于這里的內(nèi)容大致的思慮和上面的一樣具體做法請參照筆者的另一篇文章。
四、Eclipse中JSP文件中文亂碼
在Eclipse或者MyEclipse中由于默認的JSP編碼格式為ISO-8859-1,所以當打開由其他編輯器編輯的JSP文件時會出現(xiàn)亂碼,如圖所示
對于這個問題我們只需要更改一下Eclipse或者是MyEclipse中對JSP的默認編碼就可以了,修改的地方(我的MyEclipse版本為11)如圖所示
PS
在Eclipse或者MyEclipse當中JSP文件默認的編碼為ISO-8859-1,所以在JSP代碼中間如果出現(xiàn)中文就不能保存,例如如下代碼
%@ page language="java" import="java.util.*" %>
html>
head>
title>中文顯示示例/title>
/head>
body>
這是一個中文顯示示例:
%
String str = "中文";
out.print(str);
%>
/body>
/html>
修改后在保存的時候會提示如下:
現(xiàn)這個提示的原因在于JSP源文件中有ISO=8859-1編碼無法識別的中文字符,對于這個問題,解決辦法就是在JSP頁面中聲明頁面編碼格式即可。聲明后代碼如下:
%@ page language="java" import="java.util.*" pageEncoding="GB2312" %>
html>
head>
title>中文顯示示例/title>
/head>
body>
這是一個中文顯示示例:
%
String str = "中文";
out.print(str);
%>
/body>
/html>
其中第一行中pageEncoding=“gb2312”指明了JSP頁面編碼采用GB2312,這樣就可以正常保存JSP的源文件了。
以上就是本文所述的全部內(nèi)容了,希望大家能夠喜歡。
請您花一點時間將文章分享給您的朋友或者留下評論。我們將會由衷感謝您的支持!
您可能感興趣的文章:- jsp用過濾器解決中文亂碼問題的方法
- JSP對URL鏈接中的中文亂碼處理方法總結(jié)
- JSP利用過濾器解決request中文亂碼問題
- JSP頁面中超鏈接傳遞中文參數(shù)出現(xiàn)亂碼問題解決方法
- JSP中文亂碼常見3個例子及其解決方法
- JSP頁面?zhèn)鲄⒊霈F(xiàn)中文亂碼的解決方案
- jsp之間傳參數(shù)接受中文有亂碼問題解決方法
- jsp地址欄傳中文顯示亂碼解決方法分享
- JSP出現(xiàn)中文亂碼問題解決方法詳解