Servlet中的編碼問題


對於response.setContentType()和response.setCharacterEncoding()的理解:

經過一些實踐,對着兩個方法有了一些自己的理解,有可能今后的學習中會發現自己現在得理解是錯誤的,到時候再改吧。

setCharacterEncoding()方法的作用是指定對服務器響應進行重新編碼,與此同時,瀏覽器也會根據這個參數進行解碼。所以,無論將此方法的參數設定為“UTF-8”還是“GBK”,瀏覽器均能正確顯示中文。

如:

代碼為

request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
//response.setContentType("text/html;charset=UTF-8");

瀏覽器顯示如下:

代碼為:

request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("GBK");
// response.setContentType("text/html;charset=UTF-8");

 

瀏覽器顯示如下:

 

而setContentType()方法的作用是使客戶端瀏覽器,區分不同種類的數據,並根據不同的MIME調用瀏覽器內不同的程序嵌入模塊來處理相應的數據。

由於對Tomcat的server.xml進行了修改,將其默認編碼改為了UTF-8,如下:

<Connector port="8081" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443"
               URIEncoding="UTF-8" />

(現在的理解,不一定正確)這就將服務器端的默認中文編碼設定成了UTF-8,即在沒有進行任何設置的情況下,編寫的servlet程序中的漢字將用UTF-8的方式發送給客戶端。我查到了eclipse瀏覽器的默認編碼方式--GBK,如下圖:

 

因此,若不使用setContentType()或setCharacterEncoding()進行設置,服務器將用UTF-8的編碼方式向客戶端發送數據,而瀏覽器將用GBK編碼顯示接收到的數據,這就會導致亂碼。

但是!!!但是!!!並不是這樣的!!!!

 通過實踐,終於懂得了正確的解釋。

在eclipse中,工作區中的文字的編碼類型就是上圖紅圈中所設置的類型。當選項選為GBK時,在不用setCharacterEncoding()方法進行設置時,eclipse  代碼中傳遞的數據就會以GBK編碼格式發送出去,此時若用setContentType()方法將瀏覽器顯示編碼設置為“GBK”,則不會出現亂碼,如下:

代碼為

request.setCharacterEncoding("UTF-8");
//response.setCharacterEncoding("GBK");
response.setContentType("text/html;charset=GBK");

瀏覽器顯示:

若用setContentType()將瀏覽器顯示編碼設為“UTF-8”則會出現亂碼,如下:

代碼為:

 

request.setCharacterEncoding("UTF-8");
//response.setCharacterEncoding("GBK");
response.setContentType("text/html;charset=UTF-8");

 

 瀏覽器顯示:

 

 

最后,我還是沒弄清楚這兩個方法同時使用為什么會導致“失效”,這有待進一步思考。

2017-10-01  22:08:34


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM