JSP/ Servlet常見的中文亂碼原因

來源:互聯網
上載者:User

標籤: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, 資料庫中資料的編碼定義,統一編碼格式或做適當轉換。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.