URL query string中文字符問題
阿新 • • 發佈:2017-05-30
pre prot 默認 處理 信息 由於 bytes 情況 特殊字符
如果URL的query string中包含中文字符,在不做特殊處理的情況下通過 request.getParameter 方法是獲取不到正確的信息的,這是由於下面的兩個機制造成的
- 瀏覽器會自動對URL中的特殊字符進行編碼,比如請求 localhost:8080/TestJSp/loginMiddle.jsp?name=測試,真正請求的URL是localhost:8080/TestJSp/loginMiddle.jsp?name=%E6%B5%8B%E8%AF%95,即瀏覽器自動對中文進行了基於UTF-8(基於頁面的編碼設置)的URL編碼
- 當web server(tomcat)接收到該鏈接時,將會進行URL解碼,即去掉"%",同時默認按照ISO8859-1編碼進行解碼
得到正確信息的方式有兩種
- 更改tomcat配置,使其默認按照UTF-8對URL的特殊字符進行解碼
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8"/>
- 在獲取信息時進行如下操作
String text = new String(request.getParameter("name").getBytes("ISO8859-1"),"UTF-8");
URL query string中文字符問題