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

Java 中 new String(bytes, "gb2312") 編碼轉換詳解

     編輯:程式設計綜合問答

代碼含義

sql = new String(sql.getBytes(), "gb2312");

這行代碼的作用是:將字符串 sql 按平台默認編碼轉為字節數組,再按 GB2312 編碼解碼為新字符串。

執行流程解析

  1. sql.getBytes():使用 JVM 默認字符集(如 UTF-8、GBK 等)將字符串編碼為 byte[]。
  2. new String(byte[], "gb2312"):指定用 GB2312 字符集將該字節數組解碼為字符串。

典型應用場景

常用於修正編碼錯亂。例如:

  • 數據庫連接層默認用 ISO-8859-1 讀取了 GB2312 存儲的數據,導致中文亂碼。
  • 先用 getBytes("ISO-8859-1") 還原原始字節,再用 new String(bytes, "GB2312") 正確解碼。

⚠️ 關鍵注意事項

原代碼缺陷:getBytes() 無參數時用「平台默認編碼」,跨平台行為不一致。生產代碼務必顯式指定編碼:

// 正確寫法:明確指定源編碼與目標編碼
sql = new String(sql.getBytes("ISO-8859-1"), "GB2312");

現代替代方案

Java 7+ 建議使用 StandardCharsets 避免硬編碼字符串:

import java.nio.charset.StandardCharsets;

sql = new String(sql.getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.GB2312);
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved