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

Servlet 與 JSP 多國語言顯示核心原理:字符集、編碼轉換與最佳實務

     編輯:關於JSP

Java 內部字符模型

  • Java 運行時所有 String 物件採 UTF-16 (Unicode) 儲存。
  • I/O 操作涉及 位元組流 ↔ 字符流 轉換,必須指定 Charset。

表單提交編碼鏈路

  1. 瀏覽器依頁面編碼(或 <form accept-charset="...">)將輸入文字 URLEncode。
  2. 伺服器收到位元組流,HttpServletRequest.getParameter() 依預設或指定編碼 URLDecode 為 Unicode 字串。
  3. 若編碼不一致 → 亂碼(錯誤的 Unicode 碼點)。

關鍵配置點

環節設定方式建議值
JSP 頁面編碼<%@ page pageEncoding="UTF-8" %>UTF-8
回應輸出編碼<%@ page contentType="text/html;charset=UTF-8" %>UTF-8
請求解碼Filter 設定 request.setCharacterEncoding("UTF-8")(需在讀取參數前)UTF-8
資料庫連線JDBC URL 附加 characterEncoding=UTF-8(MySQL)或 oracle.jdbc.defaultNChar=trueUTF-8 / UTF-16
HTML Meta<meta charset="UTF-8">UTF-8

為何統一採 UTF-8?

  • 涵蓋 CJKV 所有字符,避免 GBK/Big5 互轉損失。
  • 前後端、資料庫、檔案系統編碼一致,消除轉換環節。
  • HTML5、現代瀏覽器、主流框架預設皆為 UTF-8。

常見誤區

  • 只設 contentType 不設 pageEncoding → JSP 編譯階段讀取原始檔用預設 ISO-8859-1,中文變亂碼。
  • Filter 設定 request.setCharacterEncoding 位置錯誤(在 getParameter 之後) → 無效。
  • GET 請求參數編碼由容器 URIEncoding 決定(Tomcat server.xml <Connector URIEncoding="UTF-8">)。

完整 Filter 範例

public class EncodingFilter implements Filter {
    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)
            throws IOException, ServletException {
        req.setCharacterEncoding("UTF-8");
        resp.setCharacterEncoding("UTF-8");
        resp.setContentType("text/html;charset=UTF-8");
        chain.doFilter(req, resp);
    }
}

於 web.xml 映射 /* 確保所有請求通過。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved