轉(zhuǎn)自: http://hpi-ls.blog.163.com/blog/static/20214748201022295532305/
前言:
使用Tomcat進(jìn)行JSP開發(fā)最頭疼的莫過(guò)于中文亂碼問題了,總結(jié)Tomcat亂碼問題出現(xiàn)的原因必須明白以下幾點(diǎn):
內(nèi)容:
1. Tomcat一般總是默認(rèn)使用ISO-8859-1作為字符編碼方式的。所以,除非你在Servlet中使用了 request.setCharacterEncoding("編碼方式");指定了特殊的編碼方式,否則Tomcat默認(rèn)使用ISO-8859-1的編碼方式。
2. 在JSP頁(yè)面中pageEncoding和charset和含義是不同的。pageEncoding是指頁(yè)面的編碼格式(請(qǐng)記住!,十分重要~,與顯示無(wú)關(guān)),也就是說(shuō)無(wú)論你JSP里的pageEncoding采用什么方式,如果出現(xiàn)中文亂碼,原因不在于pageEncoding的所指定的編碼方式不對(duì),而在于charset的屬性不對(duì)。charset是負(fù)責(zé)JSP頁(yè)面中的字符按什么編碼方式顯示。pageEncoding只負(fù)責(zé)頁(yè)面的編碼格式,而后 JAVA虛擬機(jī)負(fù)責(zé)按照pageEncoding指定的編碼轉(zhuǎn)換成Unicode編碼的字節(jié)碼文件。(也就是說(shuō),無(wú)論你pageEncoding指定什么方式,最終都是轉(zhuǎn)換成了Unicode編碼。)另外請(qǐng)大家注意,如果從客戶端提交的用戶請(qǐng)求里的中文也是使用pageEncoding方式編碼的。也就是說(shuō),在Servlet中request.getParameter("參數(shù)");Tomcat默認(rèn)是使用ISO-8859-1方式去讀取的,但實(shí)際里面的字符編碼方式應(yīng)該是JSP頁(yè)面pageEncoding所指定的方式。除非用戶自己加上request.setCharacterEncoding("編碼方式");
3.? 明白pageEncoding和charset之間的關(guān)系。一般而言,如果頁(yè)面里指定了pageEncoding的方式也就是說(shuō),比如:
<%@ page language="java" import="java.util.*" pageEncoding="GBK" %> 這句話,而沒有指定charset的話,那么頁(yè)面默認(rèn)是按照charset=ISO-8859-1編碼方式顯示字符,按照 pageEncoding="GBK"方式進(jìn)行頁(yè)面的編碼。如果你的JSP頁(yè)面里面沒有指定pageEncoding方式,而只是說(shuō)明了charset的話,比如:
<%@ page contentType="text/html;charset=utf-8"%> 這句話,那么JSP默認(rèn)是按照pageEncoding="utf-8"進(jìn)行頁(yè)面編碼的,字符集按照charset=utf-8"顯示。
?
4. 使用request.setCharacterEncoding("編碼方式");
注意:
request.setCharacterEncoding()僅僅對(duì)POST提交方式起作用,對(duì)于GET方式提交還是會(huì)出現(xiàn)亂碼問題
。
要解決GET 提交中文的亂碼問題,可以在Server.xml 的<Connector port="8888" protocol="HTTP/1.1"
?????????????? connectionTimeout="20000"
?????????????? redirectPort="8443" />
加入: URIEncoding="utf-8" useBodyEncodingForURI="true"
另外, request.setCharacterEncoding()這句話一定要放在要讀取的第一參數(shù)之前調(diào)用。否則也不起作用了!!
5. 也可以創(chuàng)建一個(gè)filter來(lái)對(duì)編碼進(jìn)行轉(zhuǎn)換 ,但filter也只對(duì)post提交方式起作用,對(duì)get無(wú)能為力。URIEncoding對(duì)post不起作用。
?
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
