Tomcat6 中文亂碼(二)

來源:互聯網
上載者:User

參考了之前的一篇文章,在此略作總結,把關鍵要點也歸納一下:

 

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值了。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.