關於Servlet出現亂碼問題

通常的處理亂碼的方式都是用:web

request.setCharacterEncoding("GBK")tomcat

可是這種方法只對POST方法提交的表單纔有效果。服務器

網上資料顯示:自從Tomcat5.x開始,GET和POST方法提交的信息,Tomcat採用了不一樣的方式來處理編碼,對於POST請求,Tomcat會仍然使用request.setCharacterEncoding方法所設置的編碼來處理,若是未設置,則使用默認的iso-8859-1編碼。而GET請求則不一樣,Tomcat對GET請求並不會考慮使用request.setCharacterEncoding方法設置的編碼,而會永遠使用iso-8859-1編碼,所以,tomcat將會使用iso-8859-1將提交的字節轉換成字符串。編碼

鑑於此,提供一下三種解決方法:spa

1. 將GET請求改爲POST請求,而後就能夠使用request.setCharacterEncoding方法設置編碼,並使用request.getParameter方法直接得到中文請求參數了,這種方法簡單明瞭。orm

 

2. 不用改GET請求,在Servlet中使用以下的代碼來獲得中文請求參數。server

 String name = new String(request.getParameter("name").getBytes("ISO-8859-1"), "GBK");xml


3.對於GET方法,還能夠經過修改Tomcat的配置來搞定。ci

方法以下:字符串

在conf/server.xml裏的<Connector />標籤內加URIEncoding="GBK",或者是UTF-8。如:

<Connector port="8080" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="GBK"/>


對於POST方法提交的表單,上面的方法二仍然有效,我的建議使用方法二,由於方法二的代碼是利用了Java的編碼能力,對於全部的Web服務器都會有效,而setCharacterEncoding方法是經過Web服務器支持的,並非全部的Web服務器都會對該方法有很好的支持。

相關文章
相關標籤/搜索