javaweb 中的亂碼問題

破玉發表於2016-03-25

一、post 方式

首先我們看下面一段程式碼,在該HTML中我們指定的編碼為“UTF-8”,如圖所示。

在該程式碼中,我們將表單資料提交給ParamServlet 處理

servlet 會將接收到的資料列印到控制檯

控制檯會正常顯示兩個值

然後輸入中文

提交後顯示亂碼

原因分析:

我們在瀏覽器輸入漢字後,瀏覽器查UTF-8編碼表後,將漢字轉化成二進位制(一個漢字在UTF-8中佔三個位元組)

傳送給伺服器處理,如果伺服器沒做任何控制(以tomcat為例),會預設去查ISO8859-1這個碼錶(一個位元組代表一個字元)來解析資料

iso8859-1裡沒有那麼多字元,有的字在iso8859-1中根本沒有對應字元,就用?表示,有對應的就會顯示哪些奇怪的字元,就出現了亂碼嘍,

所以,解決方案就出來了,我們就明確的通知我們的伺服器不用ISO8859-1了,請用UTF-8

 

這回就不會亂碼了()

 

另外  response 與request 相類似

程式碼如下:

 

response.setContentType("text/html;charset=utf-8");

 

 二、get方式

以上方案只適用於post方式。因為post方式提交資料,資料在實體內容當中,而get方式提交,資料在url之中

對於get提交只能手動進行亂碼解決

 由於亂碼的底層編碼沒有改變,所以我們將亂碼按照ISO8859-1編碼回原來的二進位制,得到相應位元組陣列,我們再去查UTF-8碼錶,將二進位制轉換成相應字元

程式碼如下圖:

 

注:以上劃線程式碼對於post 和get方式亂碼均有效。

 

相關文章