標籤:c style class java a ext
在開發中,我們經常遇到中文亂碼的問題,比方:
&瀏覽器中看到的 Jsp/Servlet 頁面中的漢字成了 ’?’ ?
&瀏覽器中看到的 Servlet 頁面中的漢字都成了亂碼
&Jsp/Servlet 頁面無法顯示 GBK 漢字。
&Jsp/Servlet 不能接收 form 提交的漢字。
&JSP/Servlet 資料庫讀寫無法獲得正確的內容。
隱藏在這些問題後面的是各種錯誤的字元轉換和處理。解決類似的字元encoding問題,須要瞭解 Jsp/Servlet 的執行過程,檢查可能出現故障的各個點。以下是一些自己運用中的一些分享:
1.在jsp中假設指定了<%@ page contentType="text/html; charset=A"%>,那麼在該jsp中全部構造的String(不是引用),假設沒有指定編碼,那麼這些String的編碼是A的;從request得到的String假設沒有指定request的編碼的話,他是iso-8859-1的;從別的地方得到的String是使用原來初始的編碼的,比方從資料庫得到String,假設資料庫的編碼是B,那麼該String的編碼是B而不是A的,也不是系統預設的。此時,假設要輸出的String的編碼不是A,那麼,非常可能顯示亂碼的,所以首先要將String正確轉化為編碼A的String,然後輸出。
2. 假設在jsp中沒有指定<%@ page contentType="text/html; charset=A"%>,那麼相當於指定了<%@pagecontentType="text/html; charset=ISO-8859-1" %>。
3. Servlet中假設運行了語句:response.setContentType("text/html;charset=A");説明將response的字元輸出資料流編碼設定為A,全部要輸出的String的編碼要轉化為A,否則會得到亂碼。Servlet中從request得到的String的編碼和jsp中一樣的,可是在servlet java檔案裡構造的String是使用的系統預設的編碼的。在servelt中從外部得到的String是使用原來的編碼的,比方從編碼為B的資料庫得到的資料是編碼為B的,不是A,也不是系統預設的編碼。
綜上所屬,要解決我們常見的中文亂碼問題,須要理解資料互動中Jsp, Servlet, 資料庫中資料的編碼定義,統一編碼格式或做適當轉換。