jsp之間傳輸中文亂碼問題的解決辦法

首先得知道關於設置編碼各個屬性的含義:

1、pageEncoding=”UTF-8”的作用是設置JSP編譯成Servlet時使用的編碼。
2、contentType=”text/html;charset=UTF-8”的作用是指定對服務器響應進行重新編碼的編碼。
3、request.setCharacterEncoding(“UTF-8”)的作用是設置對客戶端請求進行重新編碼的編碼。
4、response.setCharacterEncoding(“UTF-8”)的作用是指定對服務器響應進行重新編碼的編碼。
response.setCharacterEncoding(“UTF-8”)的作用是指定對服務器響應進行重新編碼的編碼。同時,瀏覽器也是根據這個參數來對其接收到的數據進行重新編碼(或者稱爲解碼)。所以在無論你在JSP中設置response.setCharacterEncoding (“UTF-8”)或者response.setCharacterEncoding(“GBK”),瀏覽器均能正確顯示中文(前提是你發送到瀏覽器的數據編碼是正確的,比如正確設置了pageEncoding參數等)。

對於發送數據,服務器按照response.setCharacterEncoding—contentType—pageEncoding的優先順序,對要發送的數據進行編碼。

對於get方式提交的數據:
提交頁面在傳輸數據時,數據直接在url上進行拼接,使用&分隔key-value對,但有時key,value會出現中文等對於html標準來說不安全的字符,所以首先會用utf-8編碼,把每個字節變成%xy的形式,然後數據傳輸到服務器時,會根據服務器設置的URIEncoding屬性再編碼一次,如果沒有設置則默認以iso-8859-1來進行編碼
所以這樣到達服務器時,傳輸的數據經過了兩次編碼,當從接收頁面再獲取這數據時,也應該經過兩次解碼,才能正確的獲取參數,
第一次是對二進制內容的iso-8859-1的解碼,第二次是使用服務器設置的編碼對數據進行解碼
比如有以下幾種情況:
(1)、服務器沒有設置URIEncoding屬性,那麼數據到達服務器時,就經過了UTF-8編碼和iso-8859-1編碼,所以接收頁面也得經過兩次解碼:
new String(request.getParameter(“paramName”).getBytes(“ISO-8859-1”),”UTF-8”);
(2)、服務器設置URIEncoding=”GBK”,那麼數據到達服務器時,就經過了UTF-8編碼和GBK編碼,所以接收頁面也得經過兩次解碼:
new String(request.getParameter(“paramName”).getBytes(“GBK”),”UTF-8”);
(3)、服務器設置URIEncoding=”UTF-8”,那麼數據到達服務器時,實際上數據已經解碼了,這時候直接過去即可:
request.getParameter(“paramName”);
當然也可以這樣寫:new String(request.getParameter(“paramName”).getBytes(“UTF-8”),”UTF-8”);

對於post方式提交的數據:
對於表單中POST方式提交的數據,只要在接收數據的JSP中正確request.setCharacterEncoding參數,即將對客戶端請求進行重新編碼的編碼設置成瀏覽器編碼,就可以保證得到的參數編碼正確。

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