编码:字符串->字节数组,解码:字节数组->字符串。出现乱码就是编码使用的格式与解码使用的格式不一样导致码表中无法读取正确的字符(我们会使用的基本也就是GBK和UTF-8,乱码也就是没有控制两者的统一)
utf-8转gbk转utf-8可恢复,而且utf-8转gbk只需要一句话:
new String(str.getByte("UTF-8"), "GBK");
gbk转utf-8几乎不可恢复,以下转换示例可以在大多数情况下实现gbk到utf-8的转换.
代码:
public static String getUTF8StringFromGBKString(String gbkStr) {
try {
return new String(getUTF8BytesFromGBKString(gbkStr), "UTF-8");
} catch (UnsupportedEncodingException e) {
throw new InternalError();
}
}
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;
}
转载:
[1]: https://www.cnblogs.com/yoyotl/p/5979200.html
[2]: https://blog.csdn.net/qsir/article/details/78425199