mojibake
Mojibake is the garbled text that is the result of text being decoded using an unintended character encoding.
中文称之为乱码,其中有些是可逆的,有些是不可逆的。
上一篇介绍了字符集编解码的概念,乱码之所以产生就是编码所用的字符集和解码所用的字符集不同。用UTF-8
保存的文件采用GBK
编码打开就会是乱码。只有保存和读取时的字节是完整的,就是可逆的,如果在网络传输或者远程过程调用中丢失了某些字节,那就完全不可逆了。
String s = "中文";
System.out.println new String(s.getBytes("UTF-8") ,"LATIN1");
System.out.println new String(s.getBytes("UTF-8") ,"GBK");
上面,我们先获取字符串s的UTF-8
编码,然后把这些字节分别按LATIN1
和GBK
解码,于是就有了乱码
ä¸æ
涓枃
如果知道产生的乱码是因为那两种字符集导致的,就会很容易恢复。
String s = "ä¸æ";
System.out.println new String(s.getBytes("LATIN1") ,"UTF-8");