首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> JSP 程式設計 >> 關於JSP

深入解析 JSP 中 pageEncoding 與 contentType 的編碼差異

     編輯:關於JSP

核心概念

屬性作用階段說明
pageEncodingJSP 編譯階段指定 JSP 檔案本身的儲存編碼,容器據此讀取原始碼並轉為統一的 UTF-8 Java 原始碼(.java)。
contentType (charset)回應輸出階段指定伺服器送往瀏覽器的內容編碼,即 HTTP Response Header 中的 Content-Type: text/html; charset=...。

三階段編碼流程

  1. JSP → .java:容器依 pageEncoding 讀取 JSP,若設錯或缺失,中文會產生亂碼,進而導致編譯出的 Java 原始碼錯誤。
  2. .java → .class:javac 以 UTF-8 讀取 Java 原始碼,編譯為 UTF-8 編碼的位元組碼(.class),此階段與原始 JSP 編碼無關。
  3. .class → 瀏覽器:容器執行 Servlet,輸出內容時依 contentType 的 charset 編碼送往客戶端。

預設值與關聯行為

  • 兩者預設皆為 ISO-8859-1。
  • Tomcat 4.1.x 行為:若只設定其中一個,另一個會自動跟隨相同值,但此非規範強制,視 JSP 容器實作而定。
  • 最佳實務:明確同時宣告兩者,且 pageEncoding 對應原始檔編碼,contentType 對應輸出編碼(如 UTF-8),特別利於 CJKV 多語系頁面。

實際範例

<%-- 僅設 contentType 為 UTF-8,若原始檔為 GBK,中文會亂碼 --%>
<%@ page contentType="text/html;charset=utf-8" %>

<%-- 同時指定 pageEncoding=GBK,容器正確讀取原始檔,輸出再轉 UTF-8 --%>
<%@ page contentType="text/html;charset=utf-8" pageEncoding="GBK" %>

若在記事本或 UE 編輯器直接儲存,檔案編碼通常為系統預設(大陸 GBK、台灣 Big5),務必以 pageEncoding 宣告該編碼。

補充說明

  • .java 檔編譯時預依作業系統 Locale 編碼讀取,故較少亂碼問題;JSP 缺乏此機制,必須靠 pageEncoding。
  • 建議統一專案採用 UTF-8 儲存 JSP,並設定 pageEncoding="UTF-8" contentType="text/html;charset=UTF-8",一勞永逸。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved