1. 程式人生 > >URL query string中文字符問題

URL query string中文字符問題

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編碼進行解碼

得到正確信息的方式有兩種

  1. 更改tomcat配置,使其默認按照UTF-8對URL的特殊字符進行解碼
    <Connector port="8080" protocol="HTTP/1.1"  
               connectionTimeout="20000"  
               redirectPort="8443"  
               URIEncoding="UTF-8"/> 

  2. 在獲取信息時進行如下操作
    String text = new String(request.getParameter("name").getBytes("ISO8859-1"),"UTF-8");

URL query string中文字符問題