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

WebLogic 8.1 中文亂碼完整解決方案:從 JSP 到 JDBC 再到加密

     編輯:Java 相關知識

現象與根因

WebLogic 8.1 默認編碼非中文友好,導致靜態頁、JSP、表單提交、數據庫交互、文件路徑、加密等多個環節出現亂碼。核心策略是全鏈路統一編碼(推薦 GBK),並針對各層配置入口點。

Web 層配置

1. 靜態 HTML

<meta http-equiv="Content-Type" content="text/html; charset=GBK">

2. JSP 頁面級

<%@ page contentType="text/html; charset=GBK" %>

3. 全局 JSP 配置(weblogic.xml)

<jsp-descriptor>
  <jsp-param><param-name>compileCommand</param-name><param-value>javac</param-value></jsp-param>
  <jsp-param><param-name>compilerSupportsEncoding</param-name><param-value>true</param-value></jsp-param>
  <jsp-param><param-name>encoding</param-name><param-value>GBK</param-value></jsp-param>
</jsp-descriptor>

4. 請求參數編碼(二選一)

web.xml:

<context-param>
  <param-name>weblogic.httpd.inputCharset./*</param-name>
  <param-value>GBK</param-value>
</context-param>

weblogic.xml(推薦):

<charset-params>
  <input-charset>
    <resource-path>/*</resource-path>
    <java-charset-name>GBK</java-charset-name>
  </input-charset>
</charset-params>

文件名與目錄中文

超鏈接路徑含中文時,必須 URLEncoder.encode:

<a href="<%=java.net.URLEncoder.encode("./測試/測試.jsp")%>">go</a>

JDBC 層配置

1. 確認數據庫字符集

SELECT * FROM v$nls_parameters WHERE parameter='NLS_CHARACTERSET';
  • ZHS16GBK:無需轉碼
  • US7ASCII:需應用層轉碼

2. Thin Driver 手動轉碼範例

寫入:

String sql = "insert into tabA(A,B) values('1111','王超')";
sql = new String(sql.getBytes("GBK"), "ISO-8859-1");
pstmt = conn.prepareStatement(sql);

讀取:

String strB = new String(rs.getString(1).getBytes("ISO-8859-1"), "GBK");

建議在屬性文件配置字符集,運行時動態判斷是否轉碼,提升可移植性。

3. OCI Driver 配置連接池屬性

WebLogic 控制台 → 連接池 → Properties 添加:

weblogic.codeset=GBK

若仍有生僻字問題,需將 Oracle nls_charset12.zip 加入 Classpath。

加密場景中文處理

常規加密算法對雙字節字符支持不佳,採用 BASE64 編碼 → 加密 → 解密 → BASE64 解碼 模式:

String pw = "中文";
pw = new sun.misc.BASE64Encoder().encode(pw.getBytes()); // 編碼
String enc = encode(pw);                                  // 加密
String dec = decode(enc);                                 // 解密
byte[] bt = new sun.misc.BASE64Decoder().decodeBuffer(dec);
pw = new String(bt);                                      // 還原明文

文末附帶完整 Kaiser 加密算法實現(含隨機輪數、字符偏移),可直接用於生產環境。

總結檢查清單

  1. 瀏覽器編碼設置
  2. HTML/JSP 頁面編碼聲明
  3. weblogic.xml 全局 JSP 編碼
  4. 請求參數編碼過濾器
  5. 數據庫字符集確認與 JDBC 轉碼策略
  6. 文件路徑 URLEncoder 處理
  7. 加密流程 BASE64 過渡
  8. 作業系統區域設置支援中文

逐項排查,亂碼無處遁形。強烈建議統一使用 GBK,字庫較 GB2312 更完整。

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