Tomcat亂碼總結

1.在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("編 碼方式");

2.Tomcat一般總是默認使用ISO-8859-1作爲字符編碼方式的。所以,除非你在Servlet中使用了 request.setCharacterEncoding("編碼方式");指定了特殊的編碼方式,否則Tomcat默認使用ISO-8859-1的編 碼方式。

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不起作用。

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"顯示。

==================================================
 

 

1 一般我們的頁面都用UTF-8編碼,IE裏面也是默認用UTF-8傳遞參數.

2 參數中包含的中文提交時都轉爲編碼形式,如果是javascript提交可以用...+encodeURI(param)的方式提交參數,地址欄顯示結果形如:xxxx&path=%E9%80%81%E5%A4%84%E7%90%86

3 一般推薦的方式是修改tomcat/conf/server.xml,在如下小節中加入URIEncoding="UTF-8"

<Connector port="8080" maxThreads="150" minSpareThreads="25"

maxSpareThreads="75" enableLookups="false" redirectPort="8443"

acceptCount="100" debug="0" connectionTimeout="20000"

disableUploadTimeout="true" URIEncoding="UTF-8" / >

4 如果不採用步驟3,可以在接收時轉化爲utf-8,這樣每個參數都必須轉換

path=new String(path.getBytes("ISO-8859-1"), "UTF-8");

發佈了49 篇原創文章 · 獲贊 82 · 訪問量 68萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章