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

JSP 使用 Cookie 儲存中文值:編碼與解碼完整實作

     編輯:關於JSP

Cookie 規範(RFC 2109)限制值僅能包含 ASCII 字符,直接存中文會導致錯誤。解決方案:寫入前 URLEncoder.encode,讀取時 URLDecoder.decode。

寫入 Cookie(addCookie.jsp)

<%@ page pageEncoding="UTF-8" %>
<%
    String name = request.getParameter("name"); // 取得中文參數
    // 關鍵:雙重編碼處理,避免瀏覽器/容器編碼差異導致亂碼
    byte[] raw = name.getBytes("ISO-8859-1");
    String decoded = new String(raw, "GB2312"); // 還原真實中文
    Cookie c = new Cookie("username", URLEncoder.encode(decoded, "UTF-8"));
    c.setMaxAge(3600);
    response.addCookie(c);
%>

讀取 Cookie(getCookie.jsp)

<%@ page pageEncoding="UTF-8" %>
<%
    Cookie[] cookies = request.getCookies();
    if (cookies != null) {
        for (Cookie c : cookies) {
            if ("username".equals(c.getName())) {
                String val = URLDecoder.decode(c.getValue(), "UTF-8");
                out.println(val); // 正確顯示中文
            }
        }
    }
%>

常見誤區與說明

  • 許多範例直接寫 URLEncoder.encode("中文", "UTF-8"),實測在 Firefox 下仍會亂碼。
  • 加入 getBytes("ISO-8859-1") → new String(..., "GB2312") 可修正容器預設 ISO-8859-1 解碼導致的字節錯位。
  • 若專案全站 UTF-8,可簡化為 URLEncoder.encode(name, "UTF-8"),前提是 request.setCharacterEncoding("UTF-8") 已在 Filter 中統一設定。

測試步驟

  1. 訪問 addCookie.jsp?name=測試名字 寫入 Cookie。
  2. 訪問 getCookie.jsp 驗證顯示「測試名字」。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved