?
/**
?*?21:24?2006-10-12
?*?@author?blackbat?
?*?@title?jsp中文亂碼終極解決方法
?*/
let's?go。
一?找出問題的根源
???亂碼可能出現(xiàn)的地方:1?jsp頁面中?
???????????????????????2?jsp頁面之間相互傳參的參數(shù)
???????????????????????3?與數(shù)據(jù)庫中數(shù)據(jù)的存取
???基本歸納為以上幾種。
二?尋找解決方案
???1?出現(xiàn)在jsp頁面中,是由于沒有設(shè)置jsp頁面的中文字符編碼。
???2?出現(xiàn)在jsp頁面之間相互傳參,是由于參數(shù)沒有設(shè)置正確的字符編碼。
???3?以上2個(gè)問題解決了,那么存到數(shù)據(jù)庫中,自然就不存在亂碼。除非你對存入到數(shù)據(jù)庫里的數(shù)據(jù)再次進(jìn)行編碼。
三解決方法:
1的解決方法?
<%
@?page?contentType
=
"
text/html;charset=gb2312
"
?
%>
加上這句解決jsp頁面中的中文亂碼顯示,tomcat編譯完后向客戶端輸出的html文件不是采
用中文編碼,所以會(huì)導(dǎo)致亂碼產(chǎn)生。
2的解決方法
2.1?
<%
request.setCharacterEncoding(
"
gb2312
"
);
%>
加上這句解決jsp頁面中的中文參數(shù)傳遞亂碼。
因?yàn)闉g覽器默認(rèn)使用的編碼是“UTF-8”發(fā)送請求參數(shù)。
我們把它改為"gb2312"就ok了。
2.2?String(request.getParameter("name").getBytes("ISO8859_1"),"GB2312");
這句的意思是,把傳來的參數(shù)全部編碼轉(zhuǎn)換成gb2312,這樣做的缺點(diǎn)是每次傳來一個(gè)參數(shù)
都要這樣寫,很麻煩。
同樣可通過設(shè)置server.xml配置文件來實(shí)現(xiàn)。
<
Connector
port
="8080"
???????????????maxHttpHeaderSize
="8192"
???????????????maxThreads
="150"
?minSpareThreads
="25"
?maxSpareThreads
="75"
???????????????enableLookups
="false"
?redirectPort
="8443"
?acceptCount
="100"
???????????????connectionTimeout
="20000"
?disableUploadTimeout
="true"
? URIEncoding
="gb2312"
/>
但是這樣就應(yīng)用到整個(gè)webapp中去了。
另:
<%
@page?pageEncoding
=
"
gb2312
"
%>
此句是為了讓jsp編譯器能正確地解碼含有中文字符的jsp頁面。
其它方法還可以修改web.xml文件,配置一個(gè)過濾器。其原理都一樣,只是換種方式而已。
有的書上專門寫了一個(gè)函數(shù)來解決亂碼,實(shí)際上對比一下就知道那種解決方法的好與壞。
回過頭來一看,解決亂碼也不過如此。
ok,實(shí)際就加上這3句搞定問題。
<%
@page?pageEncoding
=
"
gb2312
"
%>
<%
@?page?contentType
=
"
text/html;charset=gb2312
"
?
%>
<%
request.setCharacterEncoding(
"
gb2312
"
);
%>
請大家有什么想法,以及有什么不對的地方請各位說明,寫在留言上,大家一起討論。