pageEncoding與contentType中charset的關係及亂碼詳解

一、運行環境:Tomcat8.0

二、jsp文件中charset和pageEncoding的區別:

1.contentType的charset是指服務器發送給客戶端時的內容編碼
將charset爲UTF-8,那麼在瀏覽器當前網頁右鍵-->編碼,可以看到瀏覽器選擇的編碼也是UTF-8,如果charset設置爲GBK,瀏覽器編碼則會選擇爲GBK。
2.pageEncoding是指jsp頁面的輸出方式
設置pageEncoding設置爲GBK,無論這個jsp文件實際是什麼編碼方式,都會以GBK的格式輸出;pageEncoding還有一個功能就是告訴IDE這個文件是
什麼編碼格式,以便於IDE自動修改文件編碼;這裏用Eclipse測試(其他IDE未嘗試):
windows環境下選中jsp文件 右鍵-->屬性 可以看到下圖:

這裏寫圖片描述

如果Default選項爲選中狀態,當改變pageEncoding時,Eclipse會自動改變jsp文件的編碼格式。

三、jsp頁面亂碼的原因及處理

1.pageEncoding設置不當造成亂碼
關於pageEncoding的取值分爲下面三種情況(charset的取值原則與此一致):
  1. 指定pageEncoding的值,pageEncoding即爲指定的值;
  2. 只有charset的值,pageEncoding認爲和charset取值一樣;
  3. 既無pageEncoding也無charset,系統會取默認值“ISO-8859-1”

當jsp頁面pageEncoding指定的編碼和jsp頁面的實際編碼不一致時,如上圖文件編碼選擇了Other的GB2312,如果此時pageEncoding指定的編碼
不是GB2312就會出現亂碼。
2.charset指定的編碼不包含jsp頁面中的所有文字
當charset的編碼中不含有當前jsp頁面中的某些字符時,會出現亂碼情況;如:jsp頁面中含有中文字符,charset爲“ISO-8859-1”(可以保存,
發佈),pageEncoding爲GBK(其他任何Tomcat支持的含有中文字符的編碼都行,UTF-8 , gb2312等;ANSI爲windows下的編碼格式,tomcat
不支持,無法解析)時,訪問該頁面會出現亂碼,這是由於“ISO-8859-1”編碼不含有中文字符,無法正確解析導致。

另外,如果pageEncoding指定的編碼不含有jsp頁面中的所有字符,Eclipse是不讓保存的,如:pageEncoding=ISO-8859-1,jsp頁面含有中文,
當保存時Eclipse會彈出下面的對話框:

這裏寫圖片描述

3.亂碼的處理
綜上所述:爲了保證jsp不會亂碼,在Eclipse下我們可以這麼做:
  1. jsp編碼格式選擇默認的選項Default,見圖一;
  2. 不設置charset的編碼;
  3. 必須設置 pageEncoding (其實在tomcat的識別範圍內,是什麼無所謂,符合公司的規範即可);

後記

contentType="text/html; charset=UTF-8"對應於該jsp界面相應java文件的這裏,如下圖:

這裏寫圖片描述

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