如果你手里只有一把锤子,你就会把所有的问题都看成钉子。
1 “字符实体”类型邮件乱码
我在一篇 旧文 中分析过“字符实体”类型的邮件乱码。产生原因大致这样:原文是:
来信收到,谢谢 | (一) |
对应的编码是
C0 B4 D0 C5 CA D5 B5 BD A3 AC D0 BB D0 BB | (二) |
有的软件系统不支持中文,它把高位为1的字符用命名实体表示。就产生了:
À´ÐÅÊÕµ½£¬Ð»Ð» | (三) |
有的服务器或客户端软件会把这些命名实体显示成对应的CP1252字符,即:
À´ÐÅÊÕµ½£¬Ð»Ð» | (四) |
我在旧文中,用cnbook的替换表功能将(三)的命名实体替换到(二)的编码文本,再用CodeView将编码文本转换到文本。当时主要目的是介绍cnbook的替换表,手里拿着锤子,就把问题看成钉子了。其实解决这个问题可以不用cnbook。
2 用CodeView解决“字符实体”类型乱码
CodeView 是一个查看文本编码的小工具。我们用它来解决这个乱码问题。
2.1 得到CP1252字符
首先要得到命名实体对应的乱码,即CP1252字符。
À´ÐÅÊÕµ½£¬Ð»Ð»
如果你的邮件已经是这个样子,就可以跳过这步。如果你的邮件是
À´ÐÅÊÕµ½£¬Ð»Ð»
你就新建一个文本文件,内容如下:
<HTML>
<BODY>
À´ÐÅÊÕµ½£¬Ð»Ð»
</BODY>
</HTML>
BODY标签之间粘贴上要转换的命名实体。保存到html文件,用浏览器打开,就可以看到:
À´ÐÅÊÕµ½£¬Ð»Ð»
复制这些CP1252字符。
2.2 由CP1252字符得到对应编码
打开CodeView。CodeView有两行是可以自己设置编码的。把第二行设置成CP1252,将最后一行设置成CP936,即GBK。然后把前面复制的字符粘贴到文本行
这样就可以从CP1252行得到CP1252字符对应的编码文本。在CP1252行点右键,在右键菜单选择“复制全部”复制这行编码文本。
2.3 将编码当作GBK编码转换到文本
先删除掉最后一行的文本,然后将复制的CP1252编码文本粘贴到最后一行,即CP936行。这时在文本行就可以看到对应的文本。
3 结束语
如果把CP1252编码当作GBK编码,文本行还是乱码,你可以再试试Big5,即把最后一行设置成CP950。这种类型的乱码邮件还是比较容易处理的,你可以自己动手解决它。