在 J2EE Web 開發中,中文亂碼問題一直是開發者頭疼的難題。本文針對 Tomcat 5.5.9 環境,系統性地梳理從前端頁面到後端數據庫的完整編碼解決方案,助你徹底告別亂碼困擾。
無論是靜態 HTML 還是 Servlet 動態生成的頁面,都必須在 <head> 標籤中明確聲明字符編碼:
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>測試 GET && POST-Send</title>
</head>
這一步確保瀏覽器正確解析頁面字符,是解決亂碼的基礎。
在 web.xml 中配置字符編碼過濾器:
<filter>
<filter-name>SetCharsetEncodingFilter</filter-name>
<display-name>SetCharsetEncodingFilter</display-name>
<description>Set CharsetEncoding Filter</description>
<filter-class>com.gg.comm.web.SetCharsetEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>gb2312</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>SetCharsetEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
Filter 核心代碼:
request.setCharacterEncoding(targetEncoding);
response.setContentType("text/html");
response.setCharacterEncoding(targetEncoding);
修改 ${Tomcat_home}/conf/server.xml 中的 Connector 配置,強制指定 URI 編碼為 GBK:
<!-- URIEncoding="GBK": 強制 GET 方法中文參數正確傳輸 注意:Tomcat 僅支援 GBK 規範,不可設為 gb2312 -->
<Connector URIEncoding="GBK" port="80" redirectPort="8443"
maxSpareThreads="75" maxThreads="150" minSpareThreads="25">
</Connector>
關鍵點:Tomcat 只支援 GBK,不支援 gb2312,切勿混淆。
在每個 JSP 頁面頂部添加 page 指令:
<%@ page contentType="text/html;charset=gb2312" language="java"%>
或
<%@ page pageEncoding="gb2312"%>
遵循「統一編碼原則」,從文件 → 編譯 → 載入 → 執行/傳輸/響應/請求的完整鏈路保持編碼一致,即可徹底解決 Web 應用中的中文問題。