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

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