request的get和post引數亂碼問題

奮鬥的小青年_發表於2017-04-10

一、原因

1http在請求的時候,如果沒有特殊設定,採用過的是ISO8859-1的編碼方式進行資料提交,伺服器解析的時候採用的也是ISO8859-1的方式進行解碼。因為ISO8859-1字符集中沒有中文,所以造成亂碼。

 

注意:

伺服器的解碼方式和傳過來的http請求的編碼方式無關。需要各自設定。

比如:在jsp中設定了請求的編碼方式是utf-8,但是伺服器並不會採用utf-8進行解碼,在沒有設定的情況下,仍然採用的是ISO8859-1進行解碼,仍然會造成亂碼。

 

二、解決辦法

 

1post請求

 

1、設定request.setCharacterEncoding("")

 

2Tomcat預設編碼ISO8859-1,設定成其他的編碼

 

<Connector port="8080" protocol="HTTP/1.1"     

    connectionTimeout="20000"     

    redirectPort="8444"     

    useBodyEncodingForURI="true" URIEncoding="UTF-8"/>   

 

useBodyEncodingForURIURIEncoding區別

 

 

3、通過字串和位元組流轉換時使用正確的編碼獲取中文引數

String str = new String(request.getParameter("引數名").getBytes("iso-8859-1"), "utf-8");   

 

 

2get請求

 

get請求的引數的轉碼,上述post的三種方式,只有第三種能用,這和Tomcat的內部機制有關


相關文章