亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術(shù)文章
文章詳情頁

JSP出現(xiàn)中文亂碼問題解決方法詳解

瀏覽:223日期:2022-06-08 09:45:03

在介紹方法之前我們首先應(yīng)該清楚具體的問題有哪些,筆者在本博客當(dāng)中論述的JSP中文亂碼問題有如下幾個(gè)方面:頁面亂碼、參數(shù)亂碼、表單亂碼、源文件亂碼。下面來逐一解決其中的亂碼問題。

一、JSP頁面中文亂碼

在JSP頁面中,中文顯示亂碼有兩種情況:一種是HTML中的中文亂碼,另一種是在JSP中動(dòng)態(tài)輸出的中文亂碼。

先看一個(gè)JSP程序:

<%@ page language="java" import="java.util.*" %><html>	<head>	<title>中文顯示示例</title> 	</head> 	<body>	這是一個(gè)中文顯示示例:	<%		String str = "中文";		out.print(str); 	%>	</body></html>

上面這個(gè)JSP程序看起來好像是在頁面顯示幾句中文而且標(biāo)題也是中文。運(yùn)行后在瀏覽器中顯示如圖所示

原因在于沒有在JSP中指定頁面顯示的編碼,消除亂碼的解決方案很簡單上面代碼中page命令修改成如下所示即可

<%@ page language="java" import="java.util.*" contentType="text/html; charset=GB2312" %><html>	<head>	<title>中文顯示示例</title> 	</head> 	<body>	這是一個(gè)中文顯示示例:	<%		String str = "中文";		out.print(str); 	%>	</body></html>

再次運(yùn)行亂碼消失,原理就是向頁面指定編碼為GB2312,那么頁面就會(huì)按照此編碼來顯示,于是亂碼消失。

二、URL傳遞參數(shù)中文亂碼

一般情況下在使用get方法提交表單的時(shí)候傳遞的參數(shù)如果是中文的話很可能會(huì)出現(xiàn)亂碼。

下面是一個(gè)示例程序

<%@ 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="中文"" rel="external nofollow" >請(qǐng)點(diǎn)擊這個(gè)鏈接</a><br>		你提交的參數(shù)為:<%=param%>	</body></html>

上面這個(gè)JSP程序的功能就是通過一個(gè)URL鏈接向自身傳遞一個(gè)參數(shù),這個(gè)參數(shù)是中文字符串,這個(gè)程序的運(yùn)行效果如下圖

對(duì)于URL傳遞中文參數(shù)亂碼這個(gè)問題,其處理方法比較特殊,僅僅轉(zhuǎn)換這個(gè)中文字符串或者設(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ù)器可以得到正確的頁面。其原理也和上面的情況類似,就是向程序指明編碼類型,然后顯示就正常了。

三、表單提交中文亂碼

對(duì)于表單的數(shù)據(jù)可以使用request.getParameter(“”)的方法獲取,但是當(dāng)表單中出現(xiàn)中文數(shù)據(jù)的時(shí)候就會(huì)出現(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>

在上面的表單當(dāng)中想AcceptFormCharset這個(gè)頁面提價(jià)兩項(xiàng)數(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>

在上面的程序中,如果表單輸入沒有中文,則可以正常的顯示當(dāng)輸入的數(shù)據(jù)中有中文的時(shí)候,得到的結(jié)果如圖所示。

產(chǎn)生種結(jié)果的原因是Tomcat中對(duì)于post方法提交的表單采用的默認(rèn)編碼為ISO-8859-1,而這種編碼格式不支持中文字符。對(duì)于這個(gè)問題可以采用轉(zhuǎn)換編碼格式的方法來解決,現(xiàn)在對(duì)AcceptFromCharset這個(gè)頁面改動(dòng)如下:

<%@ 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對(duì)象正常取出。在上面這個(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)容大致的思慮和上面的一樣具體做法請(qǐng)參照筆者的另一篇文章。

四、Eclipse中JSP文件中文亂碼

在Eclipse或者M(jìn)yEclipse中由于默認(rèn)的JSP編碼格式為ISO-8859-1,所以當(dāng)打開由其他編輯器編輯的JSP文件時(shí)會(huì)出現(xiàn)亂碼,如圖所示

對(duì)于這個(gè)問題我們只需要更改一下Eclipse或者是MyEclipse中對(duì)JSP的默認(rèn)編碼就可以了,修改的地方(我的MyEclipse版本為11)如圖所示

PS

在Eclipse或者M(jìn)yEclipse當(dāng)中JSP文件默認(rèn)的編碼為ISO-8859-1,所以在JSP代碼中間如果出現(xiàn)中文就不能保存,例如如下代碼

<%@ page language="java" import="java.util.*" %><html>	<head>	<title>中文顯示示例</title> 	</head> 	<body>	這是一個(gè)中文顯示示例:	<%		String str = "中文";		out.print(str); 	%>	</body></html>

修改后在保存的時(shí)候會(huì)提示如下:

現(xiàn)這個(gè)提示的原因在于JSP源文件中有ISO=8859-1編碼無法識(shí)別的中文字符,對(duì)于這個(gè)問題,解決辦法就是在JSP頁面中聲明頁面編碼格式即可。聲明后代碼如下:

<%@ page language="java" import="java.util.*" pageEncoding="GB2312" %><html>	<head>	<title>中文顯示示例</title> 	</head> 	<body>	這是一個(gè)中文顯示示例:	<%		String str = "中文";		out.print(str); 	%>	</body></html>

其中第一行中pageEncoding=“gb2312”指明了JSP頁面編碼采用GB2312,這樣就可以正常保存JSP的源文件了。

遇到問題首先分析問題出現(xiàn)的原因,只有知道了原因才能去解決,學(xué)習(xí)分析問題的來源遠(yuǎn)比解決這個(gè)問題重要的多。

亂碼問題的原因就是程序(Eclipse也好,瀏覽器也罷)的編碼沒有和編程人員的編碼進(jìn)行統(tǒng)一,(就像你和一個(gè)不懂中文的人用中文交流他當(dāng)然不懂了)那么解決這個(gè)問題只需要將編程人員想要的編碼告訴程序就可以了,以上解決亂碼問題的種種方法都可以說是一種聲明編碼的過程,也就是說亂碼問題終極解決方案就是:轉(zhuǎn)碼。這里的轉(zhuǎn)碼要么是編程人員手動(dòng)轉(zhuǎn),要么就是聲明一下讓程序去轉(zhuǎn),換句話說就是:和不懂中文的交流,要么讓他學(xué)中文,要么你就去學(xué)習(xí)他的語言。

生活就是編程,編程就是生活,同之,通之!!!

到此這篇關(guān)于JSP出現(xiàn)中文亂碼問題解決方法詳解的文章就介紹到這了,更多相關(guān)JSP中文亂碼問題解決方法內(nèi)容請(qǐng)搜索以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持!

標(biāo)簽: JSP
相關(guān)文章:
主站蜘蛛池模板: 成 人 黄 色 全 集 | 久爱www免费人成福利播放 | 69xx在线观看视频 | 亚洲精品一区二区综合 | 做a网站 | 日韩欧美不卡片 | 亚洲第一毛片 | 国产日韩欧美精品一区二区三区 | 黄色一级视频免费 | 亚洲欧美h| 亚洲精品乱无伦码 | 成人福利在线视频 | 99久久国产综合精品女不卡 | 日韩在线不卡 | 欧美另类老人xxxx | a级毛片观看 | 在线观看免费视频网站色 | 国产福利不卡视频在免费 | 小明永久2015www永久免费观看 | 成年男女免费视频观看性 | 黄色片a| 晚上睡不着偷偷看b站免费是视频 | 毛片毛片毛片毛片毛片 | 9i9精品国产免费久久 | 久久视屏这里只有精品6国产 | 欧美日韩精品一区二区三区视频 | 国产人成精品香港三级古代 | 日韩一区二区三区在线 | 9久热久re爱免费精品视频 | 成人黄色片在线观看 | 麻豆国产精品免费视频 | 国内真实迷j下药在线观看 国内真实愉拍系列情侣 | 高清在线亚洲精品国产二区 | 亚洲成在人天堂一区二区 | yy9299国产精品视频 | 高清性色生活片欧美在线 | 欧美日本一本 | 欧美中文字幕一二三四区 | 欧美特黄a级高清免费看片 欧美特黄a级猛片a级 | 日本精品久久久久中文字幕2 | 国产精品国产三级国产爱网 |