天天看點

關于在web頁面亂碼

在客戶浏覽器端,頁面顯示亂碼

頁面顯示亂碼,一般有:部分資料顯示亂碼,和整個頁面亂碼

整頁面亂碼

一般是頁面設定編碼(包括jsp 開頭的 pageEncoding=”UTF-8” 和頁面屬性設定的編碼)

還有可能是使用者浏覽器手動設定的編碼。

部分資料亂碼

要看看是哪裡正常,哪裡亂碼,

例如:頁面亂碼,動态生成資料正常,或者動态生成資料亂碼,頁面正常

在java web開發中,為防止亂碼。最好全部統一。

例如utf-8

  • 将 jsp/html 等檔案編碼設定成“utf-8”
  • jsp開頭 pageEncoding="UTF-8",html 的head <meta charset="utf-8"/>
  • 也可以在 servlet/controller中設定request.setCharacterEncoding(“utf-8”); //擷取資料的編碼 response.setContentType(“text/html;charset=utf-8”); //發送資料的編碼
  • 如果背景擷取資料依然亂碼,那就用 String p = new String(str.getBytes(“iso-8859-1”),”utf-8”); //第一個編碼,要考慮傳來的資料編碼,後者要轉換成需要的編碼。

亂碼,還是要以預防為主。

關于亂碼,在《深入分析Java Web技術内幕》(阿裡巴巴)中也有較詳細的探讨:

中文亂碼,主要是由于 char-byte之間轉換(編碼解碼)方式不一緻導緻的。

1.中文變成不認識的字元(部落客注:而且往往是一個中文變兩個字元,可能是漢字在解碼時用iso-8859-1之類,導緻的)

2.一個漢字變成一個問号:是通過 ISO-8859-1 編碼,再通過ISO-8859-1解碼得到的 。(部落客注:讀者可測試 new String(str.getBytes(“iso-8859-1”),”iso-8859-1”); )

3.一個漢字變成兩個問号:多次編碼

4.一種不正常的正确解碼:中文傳輸時,被iso-8859-1拆開,最後又通過iso-8859-1再合上,導緻得到正确的漢字,由于額外編解碼,是以不建議

繼續閱讀