sql = new String(sql.getBytes(), "gb2312");
這行代碼的作用是:將字符串 sql 按平台默認編碼轉為字節數組,再按 GB2312 編碼解碼為新字符串。
sql.getBytes():使用 JVM 默認字符集(如 UTF-8、GBK 等)將字符串編碼為 byte[]。new String(byte[], "gb2312"):指定用 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);