String s2 = new String(s1.getBytes("GB2312"), "ISO-8859-1");
System.out.println(s2);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
GBK、GB2312–>Unicode–>UTF8
UTF8–>Unicode–>GBK、GB2312
1,Java编译器(即编译成class文件时) 用的是
unicod
e字符集。
2,乱码主要是由于不同的字符集相互转换导致的,理论上各个字符的编码规则是不同的,是不能相互转换的,所以根本解决乱码的方法就是不要转换编码方式,编码方式前 后统一。
3,
ASCII、GB2312、GBK、GB18030、Big5、Unicode
都是字符集的名称。它们定义了采用1~2个字节的编码规范,为每个字符赋予了一个独一无二的编号。这个编号就是我们所说的“字符编码”。
4,
Unicode
字符集定义的字符编码并不适合直接通过网络传输表达,因为它们必须转换成像0101这样的二进制字节流传输。所以就出现了不同的转换规范实现方式:UTF-8,TF-16等。这些不同的转换规范转换后的编码值和Unicode是不同的.(unicode是字符集,编码实现是utf-8,utf-16等,unicode到utf-8是有算法的,有统一的规则,但unicode和gbk等其他的编码方式是没有直接联系的不能转换)。
5,不要轻易地使用或滥用String类的getBytes(encoding)方法,更要尽量避免使用getBytes()方法。因为这个方法是平台依赖的,在平台不可预知的情况下完全可能得到不同的结果。如果一定要进行字节编码,则用户要确保encoding的方法就是当初字符串输入时的encoding(即知道以前的编码)。
6, http://825635381.iteye.com/blog/2087380(java 默认的Unicode和外部资源编码的理解)