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

Java EE 亂碼問題終極解決指南 (一):表單提交與 JSP 接收編碼對齊

     編輯:J2EE

亂碼本質:編碼不一致的「雞同鴨講」

瀏覽器以頁面編碼 (如 GBK/UTF-8) 送出表單,伺服器若以不同編碼 (預設 ISO-8859-1) 解碼,位元組序列被錯誤解讀,產生「??」或亂碼。解決核心:**全鏈路編碼統一**。

典型錯誤示範

<!-- Demo01.html: 頁面未指定 charset,瀏覽器預設可能為 GBK -->
<form action="demo02.jsp" method="post">
  用戶名:<input type="text" name="uname">
  <input type="submit" value="go">
</form>

<%-- demo02.jsp: 僅指定輸出編碼,未處理請求編碼 --%>
<%@ page contentType="text/html;charset=gbk" %>
<h1>輸入內容為:<%= request.getParameter("uname") %></h1>

結果:輸入中文顯示「??」。

修正方案:位元組轉碼法 (手動修正)

<%@ page contentType="text/html;charset=gbk" %>
<%
  // 1. 取得錯誤解碼後的字串 (實際為 ISO-8859-1 解碼)
  // 2. 還原為原始位元組陣列
  // 3. 用正確編碼 (GBK) 重新解碼
  String name = new String(request.getParameter("uname").getBytes("ISO-8859-1"), "GBK");
%>
<h1>輸入內容為:<%= name %></h1>

原理:request.getParameter() 內部預設用 ISO-8859-1 解碼位元組流。先 .getBytes("ISO-8859-1") 取回原始位元組,再 new String(bytes, "GBK") 正確解碼。

最佳實務:全鏈路 UTF-8 (一勞永逸)

  1. HTML 頁面:<meta charset="UTF-8"> 或 <%@ page pageEncoding="UTF-8" %>
  2. 2. web.xml 配置 CharacterEncodingFilter (Spring) 或 Tomcat URIEncoding="UTF-8"。 3. 資料庫連線 URL 加 characterEncoding=utf8、useUnicode=true。 4. Java 代碼中字串處理統一 UTF-8,避免中間轉碼。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved