1.GB2312等都可以用GBK代替.
2.new String(row.getBytes("GB2312"), "UTF8") 這種寫法是不對的, 中文仍然會亂碼.
方案:
解決GBK字符轉UTF-8亂碼問題: https://www.cnblogs.com/xijin-wu/p/5884822.html
徹底搞懂編碼 GBK 和 UTF8:https://www.cnblogs.com/hehheai/p/6510879.html
/** * GBK轉UTF-8 * @param gbkStr * @return */ public static byte[] getUTF8BytesFromGBKString(String gbkStr) { int n = gbkStr.length(); byte[] utfBytes = new byte[3 * n]; int k = 0; for (int i = 0; i < n; i++) { int m = gbkStr.charAt(i); if (m < 128 && m >= 0) { utfBytes[k++] = (byte) m; continue; } utfBytes[k++] = (byte) (0xe0 | (m >> 12)); utfBytes[k++] = (byte) (0x80 | ((m >> 6) & 0x3f)); utfBytes[k++] = (byte) (0x80 | (m & 0x3f)); } if (k < utfBytes.length) { byte[] tmp = new byte[k]; System.arraycopy(utfBytes, 0, tmp, 0, k); return tmp; } return utfBytes; }