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

JSP 中文亂碼與參數傳遞亂碼完整解決方案

     編輯:關於JSP

一、頁面顯示亂碼

**原因**:未在 JSP 指定字符集,容器預設 ISO-8859-1 輸出,瀏覽器以其他編碼解析。

**解決**:頁面最頂端宣告:

<%@ page contentType="text/html; charset=UTF-8" language="java" pageEncoding="UTF-8" %>

二、資料庫中文亂碼

**原因**:JDBC 連線未指定字符集,驅動程式預設編碼與資料庫不符。

**解決**:

  1. JDBC URL 加入編碼參數 (MySQL 範例):
    jdbc:mysql://localhost/db?useUnicode=true&characterEncoding=UTF-8
  2. JSP 中設定請求/回應編碼:
    request.setCharacterEncoding("UTF-8");
    response.setContentType("text/html;charset=UTF-8");

三、URL 參數傳遞亂碼 (GET 請求)

**現象**:`` 在 `b.jsp` 用 `request.getParameter("name")` 取得亂碼。

方法一:ISO-8859-1 轉碼 (傳統修正)

// b.jsp
String name = request.getParameter("name");
name = new String(name.getBytes("ISO-8859-1"), "UTF-8");

**原理**:Tomcat 預設以 ISO-8859-1 解碼 URL 查詢字串,先還原位元組再按 UTF-8 解讀。

方法二:前端編碼 + 後端自動解碼 (現代標準)

// a.jsp (前端)
var name = "中文";
name = encodeURIComponent(name); // UTF-8 編碼
location.href = "b.jsp?name=" + name;

// b.jsp (後端)
// Tomcat 8+ 預設 URIEncoding="UTF-8" 會自動正確解碼
String name = request.getParameter("name"); // 直接可用

**前提**:`server.xml` Connector 配置 `URIEncoding="UTF-8"`。

方法三:Tomcat 7 舊版專用 — 修改 request 編碼

// 在讀取參數前
request.setCharacterEncoding("UTF-8"); // 僅對 POST 有效,GET 無效
// GET 必須靠 URIEncoding 或手動 ISO-8859-1 轉碼

四、POST 表單提交亂碼

**解決**:在讀取參數前設定請求編碼:

request.setCharacterEncoding("UTF-8");

或在 `web.xml` 配置過濾器全域處理:

<filter>
    <filter-name>encodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param>
    <init-param><param-name>forceEncoding</param-name><param-value>true</param-value></init-param>
</filter>
<filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

五、AJAX 請求亂碼

  • **jQuery `$.ajax`**:預設 `contentType: "application/x-www-form-urlencoded; charset=UTF-8"`,後端同 POST 處理。
  • **`$.get`/`$.post`**:同理,確保前端頁面編碼為 UTF-8 (meta charset)。
  • **`FormData` 上傳檔案**:`contentType: false`,瀏覽器自動生成 `multipart/form-data; boundary=...`,後端用 Servlet 3.0 `request.getPart()` 處理,編碼自動協商。

六、總結:按場景選擇方案

場景推薦方案關鍵配置
JSP 頁面輸出page 指令雙宣告`contentType="UTF-8" pageEncoding="UTF-8"`
POST 表單 / AJAX請求編碼過濾器`CharacterEncodingFilter` + `forceEncoding=true`
GET URL 參數前端 encodeURIComponent + Tomcat URIEncoding`encodeURIComponent()` + `URIEncoding="UTF-8"`
資料庫讀寫JDBC URL 指定編碼`useUnicode=true&characterEncoding=UTF-8`
舊系統維護手動 ISO-8859-1 轉碼`new String(bytes, "ISO-8859-1")` → `getBytes("UTF-8")`
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved