JavaWeb中關於請求亂碼的講解

首先先了解一下Tomcat服務器(這裏服務器用Tomcat)編碼格式。

TomCat服務器的編碼格式爲ISO-8859-1,但注意ISO-8859-1不支持中文,並且一個字符由兩個字節組成。

這裏再另外說兩種編碼格式,UTF-8和GBK,UTF-8編碼的一個字符由三個字節組成,GBK編碼的一個字符由兩個字節組成。

現在看一下數據請求的圖解,如圖所示,瀏覽器數據傳輸到服務器是以字節爲單位,而服務器數據傳輸到Java程序是以字符形式傳遞,

所以如果編碼不統一,java程序中得到的前臺傳遞的數據肯定是亂碼。


解決方法(瀏覽器和Java程序以UTF-8編碼進行講解):

一:只適用於POST提交方式

request.setCharacterEncoding("UTF-8");用來設置服務器的編碼方式爲UTF-8

二:GET提交方式

String 新的變量名 =new String ( 前臺提交數據.getBytes("iso-8859-1" ),  "utf-8");

如圖:

     

解析如下(以傳輸一個字符 ”中“爲例):

首先瀏覽器中的 “中” 是用UTF-8編碼的,而UTF-8一個字符由三個字節組成,所以瀏覽器傳遞到服務器的時候是傳遞的三個字節,

而服務器是用ISO-8859-1的編碼格式進行解碼的,把前兩個字節解析成一個字符,剩下的一個字節會補0(計算機底層是由二進制編碼的,存的都是0101)變成兩個字節,然

後解碼成另外一個字符,然後傳遞給Java程序,而Java程序是用UTF-8的編碼方式進行解碼的,將用 ISO-8859-1編碼的字符(兩個字節)用UTF-8(三個字節)進行解碼自然

不會成功的輸出 “中”,所以在Java程序端需要用先用 ISO-8859-1的編碼方式進行解碼,變成對應的三個字節(補的0會捨棄),然後將這三個字節再按照UTF-8的方式進行編碼,就形成了中文 “中”。












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