Servlet中get請求和post請求在瀏覽器和服務器中的編解碼問題

  1. (解決請求亂碼)瀏覽器編碼,服務器解碼

    請求由請求行、請求頭、請求體三部分組成

    無論是get請求還是post請求,瀏覽器按照頁面編碼對參數進行編碼併發送給服務器(如果頁面不指定編碼默認爲操作系統編碼gb2312),

    get請求參數通過請求行Request URL發送服務器接收參數按照tomcat默認編碼解碼 ,tomcat的server.xml配置文件中有URIEncoding屬性(我的tomcat爲8.5版本所以沒有發生亂碼,8.0之後的tomcat默認編碼爲utf-88.0之前的tomcat默認編碼爲iso8859-1所以會亂碼)

    <Service name="Catalina">
        <Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1"  
               redirectPort="8443"  URIEncoding="utf-8"/>
    </Service>
    

    post請求參數通過請求體Request Body發送tomcat中設置的默認編碼只能解決請求行(即URL)上的中文參數服務器對請求體中的參數解碼需要通過request.setCharacterEncoding(“utf-8”)告訴服務器用utf-8的編碼形式對請求體進行解碼(服務器對請求體的默認解碼編碼格式爲iso8859-1),

默認編碼格式:

  • 瀏覽器對請求體的默認編碼爲iso8859-1,若頁面指定編碼格式,則瀏覽器以指定的頁面編碼格式對請求體編碼(請求行參數同理)
  • 服務器對請求參數的解碼分兩種情況。
    第一種是對get請求的請求行參數解碼,若tomcat在8.0以上版本的話,默認解碼編碼格式爲utf-8;若tomcat在8.0以下版本的話,默認解碼編碼格式爲iso8859-1。
    第二種是對post請求的請求體參數解碼,tomcat默認對請求體解碼編碼格式爲iso8859-1
  1. (解決響應亂碼)服務器編碼,瀏覽器解碼

    響應由響應行、響應頭、響應體三部分組成

    無論get請求響應還是post請求響應,都是在服務器處理好數據之後響應瀏覽器,如果服務器端不指定響應編碼,那麼服務器端對響應體的默認編碼爲iso8859-1,服務器通過response.setContentType(“text/html;charset=utf-8”)將響應體中的內容用utf-8編碼,同時告訴瀏覽器用utf-8對響應體進行解碼

  2. 在瀏覽器上如何查看頁面編碼格式
    答:F12打開開發者工具,console控制檯上輸入下面兩個命令

    1. document.charset
    2. document.characterSet
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章