1. 程式人生 > >Servlet中的編碼問題

Servlet中的編碼問題

clip tco lips 不用 es2017 修改 也會 程序 mime

對於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

Servlet中的編碼問題