最近一直在做關(guān)于Servlet的事情,常常出現(xiàn)亂碼,很是煩人,處理亂碼的方法有時(shí)候有效,有時(shí)候沒有效果,今天抽個(gè)時(shí)間小結(jié)一下,以防以后再出現(xiàn)這種問題。 一般的處理亂碼的方式都是用: request.setCharacterEncoding("GBK") 但是這種方法只對(duì)POST方法提交的表單才有效果,這就是前面提到的有時(shí)候有效果,有時(shí)候沒有效果的原因。 網(wǎng)上資料顯示:自從Tomcat5.x開始,GET和POST方法提交的信息,Tomcat采用了不同的方式來處理編碼,對(duì)于POST請(qǐng)求,Tomcat會(huì)仍然使用request.setCharacterEncoding方法所設(shè)置的編碼來處理,如果未設(shè)置,則使用默認(rèn)的iso-8859-1編碼。而GET請(qǐng)求則不同,Tomcat對(duì)GET請(qǐng)求并不會(huì)考慮使用request.setCharacterEncoding方法設(shè)置的編碼,而會(huì)永遠(yuǎn)使用iso-8859-1編碼,因此,tomcat將會(huì)使用iso-8859-1將提交的字節(jié)轉(zhuǎn)換成字符串。 鑒于此,提供一下三種解決方法: 1. 將GET請(qǐng)求改成POST請(qǐng)求,然后就可以使用request.setCharacterEncoding方法設(shè)置編碼,并使用request.getParameter方法直接獲得中文請(qǐng)求參數(shù)了,這種方法簡單明了。
2. 不用改GET請(qǐng)求,在Servlet中使用如下的代碼來得到中文請(qǐng)求參數(shù)。 String name = new String(request.getParameter("name").getBytes("ISO-8859-1"), "GBK");
3.對(duì)于GET方法,還可以通過修改Tomcat的配置來搞定。 方法如下: 在conf/server.xml里的<Connector />標(biāo)簽內(nèi)加URIEncoding="GBK",或者是UTF-8。如: <Connector port="8080" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="GBK"/>
對(duì)于POST方法提交的表單,上面的方法二仍然有效,個(gè)人建議使用方法二,因?yàn)榉椒ǘ拇a是利用了Java的編碼能力,對(duì)于所有的Web服務(wù)器都會(huì)有效,而setCharacterEncoding方法是通過Web服務(wù)器支持的,并不是所有的Web服務(wù)器都會(huì)對(duì)該方法有很好的支持。 |
|