| 屬性 | 作用階段 | 說明 |
|---|---|---|
pageEncoding | JSP → .java (翻譯階段) | 指定 JSP 檔案本身的儲存編碼,容器據此讀取原始碼並轉為 UTF-8 Java 原始碼。 |
contentType (charset) | .class → HTTP 回應 (執行階段) | 指定輸出給瀏覽器的內容編碼,容器將內部 UTF-8 字串轉為指定編碼後傳送。 |
pageEncoding 讀取 JSP,產生 UTF-8 編碼的 .java。若設定錯誤,中文會變亂碼並永久寫入 Servlet 原始碼。javac 以 UTF-8 讀取 .java,產生 UTF-8 位元碼 .class。此階段不受 JSP 編碼影響。.class 執行,將字串以 contentType 指定的 charset 輸出。此時 pageEncoding 已無作用。ISO-8859-1。pageEncoding="GBK"、contentType="UTF-8") 以支援中文開發與現代瀏覽器相容。<%@ page contentType="text/html;charset=utf-8" pageEncoding="GBK" %>
上例:JSP 檔以 GBK 儲存 (pageEncoding),輸出網頁採 UTF-8 (contentType)。若省略 pageEncoding,容器會以 ISO-8859-1 讀取 GBK 檔案,導致中文亂碼。
contentType 能修正 JSP 檔案讀取編碼 —— 只能靠 pageEncoding。<meta charset="..."> 可替代 contentType —— HTTP 標頭優先級高於 HTML meta 標籤。.java) 編譯時預編碼為作業系統 locale (中文 Windows 為 GBK),但 JSP 無此機制,必須靠 pageEncoding 明確指定。