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编码,然后把这些字节分别按LATIN1GBK解码,于是就有了乱码

中文
涓枃

如果知道产生的乱码是因为那两种字符集导致的,就会很容易恢复。

String s = "中文";
System.out.println new String(s.getBytes("LATIN1") ,"UTF-8");

下面由MacVim通过k.vim结合groovy演示。

mojibake