首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

JSP 連接 MySQL 中文亂碼終極解決:從 ISO-8859-1 轉碼到 GB2312

     編輯:MySQL 資料庫相關知識

問題現象

中文資料寫入 MySQL 正常,Command Client 顯示正常,但 JSP 頁面讀取顯示「火星文」(亂碼)。

嘗試過的失效方案

  • 修改 my.ini:default-character-set=utf8
  • Eclipse 專案編碼設為 UTF-8 / GB2312
  • JSP 頁面指令:<%@ page contentType="text/html;charset=gb2312" %>
  • JDBC 連線串加參數:?useUnicode=true&characterEncoding=GB2312

以上嘗試皆無效,或僅將亂碼從一種變為另一種。

根因分析與解決

冷靜思考:JSP 從 MySQL 讀取時實際使用何種編碼?經查證與測試,MySQL JDBC 驅動預設以 ISO-8859-1 (Latin1) 讀取位元組,若資料庫實際存儲為 GB2312,直接顯示必然錯位。

核心修正代碼

<%= new String(sqlRst.getString(1).getBytes("ISO-8859-1"), "GB2312") %>

邏輯: 先取得驅動以 ISO-8859-1 解讀的字串 → getBytes("ISO-8859-1") 還原原始位元組 → new String(bytes, "GB2312") 按真實編碼重組字串。

完整最佳實踐建議

  1. 資料庫層: 建庫/建表指定 CHARSET=gb2312(或 utf8),my.ini 設 default-character-set=gb2312。
  2. 連線層: JDBC URL 明確指定 useUnicode=true&characterEncoding=GB2312。
  3. 應用層: JSP 頁面指令 pageEncoding="GB2312",若仍異常再用上述雙重轉碼法修正。
  4. 統一編碼: 全鏈路(DB、連線、頁面、JS/CSS)保持單一編碼(推薦 UTF-8),避免多重轉碼效能損耗與潛在錯誤。

總結

亂碼本質是編碼解碼不匹配。找出驅動預設讀取編碼(ISO-8859-1),針對性轉碼即可破解。長遠看,全棧統一 UTF-8 是根治之道。

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