解決Tomcat請求中文亂碼的問題
在 Tomcat 中處理帶中文引數的get請求時,照著以往的做法,發現還是亂碼,這讓我丈二和尚摸不著頭腦,結果一查詢才發現,我所使用的 Tomcat8 已經對get方式中文亂碼進行了處理。Tomcat8 中終於不用為了編碼而折騰了。
原因
在Tomcat中,所有字元預設是按ISO-8859-1的編碼格式來編碼的,這是歐洲使用的一種字元編碼格式。在瀏覽器發起http請求時,將請求的url以及引數按伺服器指定的UTF-8編碼後傳送到Tomcat,這時Tomcat並不知道傳送來的字元是按什麼編碼的,使用預設的ISO-8859-1格式來解析字元,導致中文亂碼。Tomcat Http請求中文亂碼
解決
Tomcat8
高版本 Tomcat 中,Tomcat8 對 GET 的預設解碼為 UTF-8。只要沒有對 server.xml Connector 元素進行改動(對編碼部分進行引數配置),那麼,Tomcat8 對 GET 的預設解碼則為 UTF-8。也就不會亂碼了。
Tomcat7 及以下
Tomcat7 及以下版本,GET 方式提交的引數編碼,只支援 ISO8859-1 編碼。因此,有三個解決中文引數亂碼的方法: get方式傳值中文亂碼
在後臺轉換編碼,如下:
String bname = request.getParameter("bname"); bname = new
當然,前提是你頁面編碼就是 UTF-8。如果是 GBK,那上面那句程式碼後面就改成 GBK。
在客戶端使用 encodeURI() 對中文引數進行編碼,在伺服器端需要進行解碼this.setName(java.net.URLDecoder.decode(name, “UTF-8”));
修改tomcat的server.xml檔案
<Connector executor="tomcatThreadPool" port="8080" protocol="HTTP/1.1" connectionTimeout
同樣的,URIEncoding 需要與頁面編碼保持一致。
URIEncoding 是請求的 URL 中字元的編碼,會將 URL 中 %xx 這樣的 URL 按這裡指定的編碼格式去解碼,如果不指定則會使用預設的 ISO-8859-1 。
useBodyEncodingForURI=”true”,該屬性是使用 body 體的編碼格式去解析 URL 中的 %xx。
總結
Tomcat8 好。