參考了之前的一篇文章,在此略作總結,把關鍵要點也歸納一下:
1、對於JSP頁面上有亂碼的情況,首先要做的是統一編碼集,比如都設定為UTF8。
2、對於GET參數有亂碼的情況,在server.xml設定檔中,只要設定好URIEncoding就可以了;如下:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" useBodyEncodingForURI="true"
URIEncoding="UTF8"
/>
URIEncoding只對GET參數有效。
網上人說,useBodyEncodingForURI="true"是為了保證Tomcat4和5的相容性,這個屬性是針對POST參數亂碼而設值的。我試了一下,只要後面談到的步驟設定正確,這個可有可無。
3、然後就到了網上所推崇的Filter設定了。兩個要點:
首先,在Filter的doFilter方法裡面設定request.setCharacterEncoding("UTF8");
這是為了在傳參數之前就用UTF8進行編碼,然後傳遞。但這個設定只對
POST參數有效。
其次,這個Filter在web.xml聲明中,一定要放在首位,而且是其他Filter的前面。
否則沒有效果,猜想這可能與,request在被讀取之後再設
setCharacterEncoding無效,有關。
4、確保依次設定好以上三條,應該不在有亂碼之虞。同時,如果出現問題,也可以使用以下方法救急:
<%= new String(request.getParameter("userName").getBytes("iso-8859-1"),"UTF8") %>
因為Tomcat預設是基於ISO-8859-1的,因此在UTF8的JSP頁面輸入參數以後,Tomcat也會按ISO-8859-1編碼,然後傳遞給下一個JSP頁面。因此在下一個JSP頁面中按上面寫的這樣“反編碼”一下,就可以得到正確的UTF8值了。