Google
 

用CodeView分析“字符实体”类型邮件乱码

如果你手里只有一把锤子,你就会把所有的问题都看成钉子。

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>
&Agrave;&acute;&ETH;&Aring;&Ecirc;&Otilde;&micro;&frac12;&pound;&not;&ETH;&raquo;&ETH;&raquo;
</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。 这种类型的乱码邮件还是比较容易处理的,你可以自己动手解决它。

 

Google
 

个人主页留言本我的空间我的程序 fmdd@263.net