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

Java Web 中文亂碼終極解決方案全攻略

     編輯:Java 程式設計入門

一、Tomcat 層面:URI 編碼設定

HTTP/1.1 連接器

<Connector port="8080" protocol="HTTP/1.1"
    connectionTimeout="20000"
    redirectPort="8443"
    URIEncoding="UTF-8" />

AJP 連接器(前端有 Apache/Nginx 反向代理時必設)

<Connector port="8009" protocol="AJP/1.3"
    redirectPort="8443"
    URIEncoding="UTF-8" />

原理: Tomcat 預設用 ISO-8859-1 解碼 URL,加上 URIEncoding="UTF-8" 強制指定解碼字集。

二、URL 參數中文傳遞:雙重編碼/解碼法

適用於任何部署環境(含反向代理、負載均衡)。

客戶端(JavaScript)編碼

// 推薦:雙重 encodeURIComponent
title = escape(encodeURIComponent(title)); 
// 或
title = encodeURI(encodeURI("包含中文的串"));

url = contextPath + "/print/printList!printTable.action?title=" + title;

伺服端(Java)解碼

String title = java.net.URLDecoder.decode(request.getParameter("title"), "UTF-8");

核心原則: 前端編碼幾次,後端就要解碼幾次,且字集必須一致(UTF-8)。

三、JSP 頁面編碼宣告

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

若仍亂碼,可嘗試手動轉碼:

// 從 ISO-8859-1 轉回目標編碼
String str = new String(str.getBytes("ISO-8859-1"), "UTF-8");

// 輸出前轉為 ISO-8859-1(網路傳輸標準)
String outStr = new String(str.getBytes("UTF-8"), "ISO-8859-1");

四、核心原理總結

階段預設編碼建議設定
URL 解碼ISO-8859-1URIEncoding="UTF-8"
Request 參數ISO-8859-1前端雙重編碼 + 後端 UTF-8 解碼
JSP 輸出ISO-8859-1pageEncoding="UTF-8"
Java 內部UTF-16統一使用 UTF-8 儲存/傳輸

五、最佳實踐清單

  1. 所有檔案儲存為 UTF-8 無 BOM
  2. Tomcat server.xml 兩個 Connector 皆加 URIEncoding="UTF-8"
  3. 前端 AJAX/表單統一 encodeURIComponent
  4. 後端統一 URLDecoder.decode(param, "UTF-8")
  5. JSP/HTML 頁面頭部宣告 charset=UTF-8
  6. 資料庫連線字串加 characterEncoding=utf8
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved