常见邮件乱码的处理方法
常见邮件乱码的处理方法
邮件乱码的成因分析
1.由于网络传输的限制,E-mail只允许传送七位ACSII码字符,而汉字的内码却是八位,这样当中文邮件在通过只能处理7位字符的E-mail网关时,系统就会将文件中每个字符的第八位都滤掉(截去第八位),从而导致汉字内码不可识别,最终造成乱码(这就是所谓的截位乱码)。
2.由于编码方式比较繁多,用户若没有正确对收到的邮件进行解码就不能显示它们,此时邮件也将表现为乱码,也就是我们通常所说的编码乱码,如图所示。

3.由于很多英文编辑软件都是以单字节字符为单位来处理文本,我们在编辑汉字时就很容易出现删除半个汉字的情况,同时电子邮件软件在自动换行时也容易将一个汉字分成两半,这就会出现半个汉字的情况,而那些剩下的半个汉字往往又会和相邻的汉字重新组合,使得文本面目全非,从而造成邮件乱码。
4.还有一种常见的乱码现象,那就是由于常见的汉字内码较多,如国内常见的GB码,港台常见的BIG5码,以及有些海外华人使用的HZ码等。当不同用户使用了不同的汉字内码时,收件人若没有相应的汉字内码支持功能,这些邮件也会显示为乱码(该种乱码在我们与港台用户进行信息交流时最为常见)。
七位编码原因造成的乱码现象及解码办法
收到采用七位编码方式的邮件后不能正确的判断、解码是造成邮件乱码的主要原因,而这些编码的解码方式又不太一样,现分别介绍如下:
1.UUENCODE编码
uuencode和uudecode原来是unix系统中使用的一种编码方式,后来被改写到DOS中,是早期最常用的传送非ASCII码文件的编码方式,目前使用得较少。
一般来说,当我们使用不支持UUENCODE解码的电子邮件软件收到采用UUENCODE编码的邮件之后,系统将显示为:
begin 0600 index.gb
MH;ZQOL2_PKS#O]3"N/S0PM*[M,ZAOPJCJ,G/U,+2U,"TM<30PM3VN_*XQ+:O
……
end
UUENCODE乱码的特点就是前面有一个“begin”,后面紧接着被编码的原始文件的文件名,接着就是Uuencode编码的内容(显示为乱码),并且在乱码的后面还有一行“end”。对于碰到的UUENCODE乱码,我们可采用以下三种方法加以解决:
(1) 利用邮件的转发功能将该邮件转寄给自己,然后再使用那些支持UUENCODE解码的电子邮件软件 (如Eudora、Outlook Express、Foxmail等)重新接收该邮件,乱码即可消除。
(2) 利用电子邮件软件的导出功能将该邮件保存为一个单独的邮件文件(一般应采用Outlook Express的.EML邮件格式),然后再采用Outlook
Express打开该邮件即可自动解码。
(3) 将邮件中的Uuencode“乱码”全部拷贝下来,然后粘贴到一个文本文件中(若乱码出现在邮件附件中,则直接将附件文件另存为磁盘文件即可),并将它们的扩展名修改为.UUE,最后使用Winzip打开该文件即可解码。
2.MIME编码(Multipurpose Internet Mail Extention)
UU编码比较复杂,因而随后又发展出一种新的编码方式即 MIME(Multipurpose Internet Mail Extention)“多媒体邮件扩展”,它以物件作为包装方式,可将多种不同文件一起打包后传送,并且能在传送时即时编码,收到时也能即时解码还原。用户根本不需要了解编码和解码的具体步骤,只要将邮件寄出即可,其余工作都由电子邮件软件自动来完成,使用非常方便。当然,使用MIME编码的先决条件就是收发双方的电子邮件软件都必须支持此种编码方式,否则收件人的邮件软件将无法对其进行还原,看到的也就是一大堆乱码了。由于MIME比较方便,其已成为电子邮件编码事实上的标准,我们最常见的Netscape
Mail、Internet Mail、Endora、Foxmail、The-Bat!、Becky!等软件都支持MIME编码方式。
MIME并非就像有些人想象的那样是一种固定的编码,其实它是一种编码规格,是一类编码的统称,目前MIME主要有Base64和QP(Quote-Printable)等两种编码方式。其中Base64的规则是将整个文件重新按照7位编码,通常适用于传送二进制文件,而QP则是跳过文件中原有的7位信息,而仅将8位数据转成7位,主要适用于非ASCII码的文字内容(如中文邮件等)。不过无需担心的是,支持MIME编码方式的E-mail软件一般都能智能收到的邮件是采用的何种编码,然后自动相应的解码方式。
3.Base64 encode编码
Base64是MIME编码之一,它采用了将3个字节(8位)编译为4个字节(6位)表示的方法,编码后的内容为6位的,因此可以避免第8位被邮件服务器截掉。目前多数电子邮件软件都能支持Base64
encode解码,当我们采用不支持Base64 encode编码方式的电子邮件软件收到使用该编码的邮件后,系统将显示为:
MIME-Version:1.0
Content-type:text/plain;Charset="us-ascii"
Content-transfer-encoding;base64
在Base64乱码前一般有“信头”:Content-type(内容及类型),Charset(字符集)及Content-Transfer-encoding(内容传输编码方式)等内容,比较容易判断。对于碰到的Base64
encode乱码,我们可采用与解决UUENCODE乱码完全相同的方法加以解决(这两者的编码方式差不多)。
4.QP编码
QP-encode(Quoted-Printable Content-Transfer-Encoding)也是MIME编码之一,它是将一个字节用两个16进制数值表示,然后在前面加“=”。QP-encode“乱码”大体格式为:
=d2=bc=b3=b8=d5=db=c4=c4=bc=d2=b5=f6=b1= e5=c9=e7=b6=f8=b0
由于采用QP编码方式的邮件通常有很多等号,因此能非常直观的进行判断!多数电子邮件软件都能支持QP解码,当我们采用不支持QP编码方式的电子邮件软件收到使用该编码的邮件后,系统将显示为上述乱码。解决QP乱码同样可采用前述三种方法,不过在采用Winzip对QP解码时必须注意在邮件头中加上“Mime-Version:
1.0”和“Content-Transfer-Encoding: quoted-printable”等两行(如果原来没有的话),并且信头中间不能留空行,信头与正文之间要有一个空行,然后再将其以UUE为扩展名保存在磁盘上,最后使用Winzip打开该文件即可解码。
5.Binhex编码
Binhex编码主要用于Mac上,PC机很少使用,国内用户一般不会碰到,这里就不作详细介绍了。需要说明的是,除Eudora外,其它各种常用电子邮件软件都不支持Binhex编码,如果你收到了由Binhex编码而成的邮件则应使用Binhex3.exe或wincode进行解码。
6.HZ编码
这是旅居海外的中国人发明的一种七位编码方式,它把汉字的最高位去掉,然后用一特定符号来表明哪些编码经过了处理,而后再进行适当的逆处理即可还原。这种编码的特点就是邮件正文有“~{”和“}~”的符号,在这两种符号之间的内容为乱码,如:
HZ- ~{Q'Hm<~!"SCHm<~!"BrHm<~5D:C0iBB~}
对于采用HZ编码而造成的乱码来说,解决办法是非常简单的,几乎所有的中文电子邮件软件都支持HZ编码,我们无需操心,系统将自动解码后显示邮件的全文(Outlook
Express是个例外,它需要用户手工指定,详见下面介绍)。用户若使用Becky!等英文软件则可使用“南极星”之类的多内码支持软件。
在Outlook Express中,系统不会自动对采用HZ编码的邮件进行解码,我们应选择Outlook Express邮件阅览窗口中的“查看”、“编码”、“其它”、“简体中文HZ”命令,将系统编码调整为HZ编码形式,然后就可以正常阅读了。另外Outlook
Express还具有发送HZ编码邮件的功能,我们只需在新邮件撰写窗口中选择“格式”、“编码”、“其它”、“简体中文HZ”命令即可将所撰写的邮件采用HZ编码发送出去(有助于顺利通过各个7位网关传送到国外的收件人手中)。不过在国内使用HZ编码非但没有必要,而且还可能给收件人的阅读带来麻烦,因此我们一般应选择“格式”、“编码”、“简体中文(GB2312)”命令以GB码方式发送邮件。
其它原因造成的乱码现象及解码办法
1.汉字内码
由于汉字内码不同所造成的乱码现象是目前我们最常见的乱码现象之一,这主要是由于BIG5码与GB码不兼容所造成的(HZ编码也是汉字内码之一,不过前面已经提到它的解码方法,这里就不再说明了)。
当我们在基于GB码的简体中文Windows 98中收到采用BIG5码的电子邮件之后,系统将会因为汉字内码的不同而显示为乱码,一般表现为信件内容有空格、日文、偏旁部首等(由于BIG5码乱码的现象比较普遍,相信大家看到BIG5码的乱码之后应该能直接判断出来)。对于这些乱码,我们可采用下面两种方法加以解决:
(1) 在系统上加挂多内码支持软件,如南极星、Magic-Win98等,以便正确显示邮件内容。
(2) 利用邮件的转发功能将该邮件转寄给自己,然后再使用那些支持BIG5码的邮件软件(如Foxmail、Outlook Express等),收取该邮件并予以显示。
2.“半个汉字”
前面我们谈到,当我们使用西文软件处理中文时,它们往往会因不能正确识别双字节内码的中文而导致“半个汉字”现象(如删除了半个汉字、在一个汉字的中间错误的进行了换行、使用字符替换功能把一个汉字的后一个字符和相邻汉字的前一个字符当成一个汉字予以替换等),出现这些情况之后,剩下的半个汉字往往又会与后面一个汉字的前半部分组成一个新的汉字,这就会导致乱码。由于半个汉字所造成的乱码现象多半表现为:
“把砑⒂萌砑⒙蛉砑暮冒槁隆薄* ”
它的显示与BIG5码所造成的乱码有些类似,不过半个汉字造成的乱码中可以识别的汉字较多,而BIG5码所造成的乱码中可以识别的汉字较少,相反的日文、偏旁部首等不可识别内容较多。
对于收到的包含半个汉字的乱码邮件,我们一般可将其另存为文本文件,然后在DOS下启动一个不支持双内码的西文文字处理软件(如EDIT),并利用它不支持双字节的特点,将乱码行的首字符删除,后面的部分就会和相邻的“乱码”重新组合正常(注意,中文Windows
98支持双字节,它不允许删除半个汉字,因此此方法在Windows 98中很难实现)。
提示:使用中文电子邮件软件不会出现上述问题,而使用西文电子邮件软件时只要在每个汉字后面加入一个空格也能在一定程度上防止这一问题的发生。
3.邮件传输原因
前面我们谈到,当中文文本没有经过编码而直接通过只能处理7位字符的E-mail网关时,系统就会将文件中每个字符的第八位都滤掉(截去第八位),从而导致汉字内码不可识别,最终造成乱码。对此原因造成的乱码我们一般无法进行解码,只能要求对方采用7位编码后重新发送。另外由于服务器出现故障而使邮件错误传输也会造成乱码,这种乱码也无法解码,要求对方重发一次将是我们唯一的选择。这类乱码如图所示。

避免乱码的措施
前面我们已经介绍了常见乱码的产生原因及相应的解决办法,不过这都是事后诸葛亮,效果并完全理想,而事先做好防范工作,防止乱码的出现才是我们的最佳选择!防止乱码的措施主要有:
1.选择比较流行的电子邮件软件
市面上流行的电子邮件软件大多对各种编码的支持较全,并且相互之间的兼容性也较好,使用它们可在一定程度上避免因编码不同而导致的乱码。
2.使用“附件”功能发送文件
常见的电子邮件软件都能自动对附件文件进行编码、解码,这就意味着用户无需为编码、解码的具体步骤而操心。因此用户若无特殊需要,一般应采取将邮件写在一个TXT文本文件中,然后利用电子邮件软件的附件功能将该文件发送给收件人(向海外朋友发送中文邮件时尤其应使用此方式)。
需要说明的是,采用此方式时,若收件人的邮件软件不支持自动解码,那么他还是需要手工解码,仍然可能无法看到你发给他的邮件。这时我们不妨采用一下最原始的方法,即将需要撰写的邮件保存为图形文件或EXE可执行文件,然后再将这种特殊的书信采用附件方式发给收件人。收件人收到该邮件之后只要打开附件,然后使用图形浏览软件进行查看、或直接执行EXE可执行文件即可直接查看邮件内容。事实证明这种原始的方法往往是最有效的。
3.不使用Outlook Express的HTML文档编辑功能
Outlook Express实际上是一个功能很强的HTML编辑器,我们可利用它编辑精美的HTML邮件,不过如果收件人使用的电子邮件软件不具备显示HTML邮件的功能的话,那么他们可能只能看到“天书”般的HTML源码,这就形成了一种新的“乱码”,因此我们一般应关闭这种特别编辑功能,而采用普通的纯文本方式发送邮件。
E-mail一般在传送过程中都要对文件进行编码。这是因为E-mail只能传送ASCII码格式的文字信息。ASCII码为7位代码,非ASCII格式的文件在传送中必须经过编码工具编成相应的ASCII码进行传输,接收端在收到后再根据编码规则进行解码。若非如此就会在传输过程中出现编码截位的问题,导致收信方出现乱码。特别是中文内码的文字,属于8位代码,并非标准的ASCII码形式,由于国内通行的大部分邮件服务器都能够处理GB内码文件,所以可以直接传送文件而不需要编码,但如果要将中文邮件发到国外或在不支持8位(非标准ASCII码格式)的某些邮件主机上传输,就会产生乱码。具体的说就是在直接发送中文或非ASCII码的邮件时邮件主机无法处理,会把文件中每个字符的第八位都滤掉(截去第八位)从而使一些信息和原始信息截然不同,或邮件完全损坏成为乱码无法阅读。这也是目前造成邮件乱码的主要原因之一。如果我们对邮件进行七位编码然后进行传输解码,就能解决截位乱码现象。
(胡锦承)