分类:
2006-01-17 16:53:35
E-MAIL 编码——雾里看花
作 者 : 高祥
E-MAIL 一般在传送过程中都要对文件进行编码,因为 E-MAIL 只能传送 ASCII 码格式的文字信息, ASCII 码为 7 位代码。非 ASCII 格式的文件在传送中必须经过编码工具编成相应的 ASCII 码进行传输,在接收到后接收端再根据编码规则进行解码。若非如此就很难在传输过程中出现编码截位的问题,导致收信方出现乱码,特 别是中文内码的文字,属于 8 位代码,并非标准的 ASCII 码形式,由于国内通行的大部分邮件服务器都能够处理 GB 内码文件,所以可以直接传送文件而不需要编码,但如果要将中文邮件发到国外或在某些不支持 8 位(非标准 ASCII 码格式)的某些邮件主机上传输,就会产生乱码。具体的说就是在直接发送中文或非 ASCII 码的邮件时邮件主机无法处理,便会把文件中每个字符的第八位都滤掉(截去第八位)从而使一些信息和原始信息截然不同,或邮件完全损坏成为乱码无法阅读。这也是目前造成邮件乱码的主要原因之一。而如果对邮件进行七位编码然后进行传输解码,就能解决截位乱码现象,使邮件准确无误。目前 E-MAIL 中一般采用 UU 、 MIME 、 BINHEX 三种编码标准,下面我们就来了解一下这几种标准。
一、 UU 编码( unix - to - unix encoding )
uuencode 和 uudecode 原来是早期 unix 系统使用的编解码程序,其内部所用算法为 Base64 后来被改写成为在 DOS 下运行的可执行程序。
UU 使用方法为:在进行邮件发送前,在 dos 方式下先用 uuencode.exe程序将原文件编码成 ASCII 文件,然后再进行发送。收件人在接到后再用 uudecode.exe 程序将文件还原。
这是 DOS 下的编码程序。在 windows 下类似的程序还有 wincode 和 winzip等, wincode 的使用原理同 DOS 下的 uuencode 、 uudecode 相同,只是利用了 windows 的界面,从而使操作更为简便。 wincode 程序除支持 UU 编码外,同时支持 mime , Binhex 等编码格式,应用范围颇为广泛。
我们以上所介绍的 UU 编码并非只能对中文进行编码,任何你要寄出的文件包括 .exe 等二进制文件都可按照编码——> 发送——> 收信——> 解码还原的步骤进行传送。
二、 MIME ( Multipurpose Internet Mail Extention )标准的编码
UU 编码解决了 E-MAIL 只能传送 ASCII 文件的问题,但我们可以从编解码的过程看出其运用并不很方便,因而随后又发展出一种新的编码标准即 MIME( Multipurpose Internet Mail Extention )译作“多媒体邮件传送模式”。顾名思义,这种编码标准支持传送多媒体文件,可在一封电子邮件中附加各种格式的文件一起发送。
其实 MIME 定义的是一种编码规格,亦或可以说是一类编码的统称,能够符合 MIME 标准的编码方式并非一种,而只要符合 MIME 规格便可顺利传送,在 MIME 定义下有两种编码方式 Base64 和 QP ( Quote-Printable ),QP 的规则是对资料中的 7 位无须重复编码,仅将 8 位数据转成 7 位, QP 编码适用于非 ASCII 码的文字内容,例如我们的中文文件。而Base64 的规则是将整个文件重新编码成 7 位,通常适用于传送二进制文件。
一般编码方式不同会影响编码之后的文件大小,而采用 MIME 标准编码的 E-MAIL 软件一般能自动判别你的邮件是采用何种编码,然后自动选择用 QP 或 Base64 来解码。
MIME 标准现已成为 Internet 电子邮件编码的主流。它的好处是以物体作为包装方式,可将多种不同文件一起打包后传送。发信人只要将要发的文件选好,它在传送时即时编码,收信人在收信时同时也是即时解码还原。完全自动化,非常方便。当然先决条件是双方的邮件软件都必须具有这项功能。使用这种方式发、收信双方所要做的工作就显得非常简单了,只须选定——> 寄出,其它的全部由电子邮件软件自动完成。由于 MIME 的方便、可靠性,愈来愈多的电子邮件采用这种方式,我们最常见的 Netcape Mail , Internet Mail 等都是采用 MIME 方式。
三、 BINHEX 编码较少见,主要用在 MAC 机上, PC 机上很少见,在此不做讲解。
但当邮件传输时出现了由于 E-MAIL 编码不对而造成的乱码时, 我们要怎样识别和判断呢?
我们都知道每种编码其格式都有其各自特征,这就给了我们一个判别的标志。我们可以根据这些特征进行编码判断。
四、 UUENCODE 编码判断及解决。
由于 UUENCODE 内部所用算法为 Base64 ,其格式为:
begin 644 gx.zip Mig)0;....
...
end
其格式特征为在乱码之前会有“ begin xxx ”后紧跟被编码的原始文件名称,然后跟编码信件内容,在最后一行为“ end ”。
根据这些特征我们可以判断出编码方式为 UUENCODE 方式,我们就可以使用一些相应 DECODE 软件解码。
具体方法有:
(1)、将 Uuencode “乱码”邮件转寄到自己的邮箱中,再使用能够支持UU 解码的电子邮件接收程序 ( 如 Eudora 、 OutLook Express 等)来接收该邮件。
(2)、通过剪辑板将 Uuencode “乱码”存入文本文件,改文件名后缀为UUE ,然后使用 Winzip 解码。
(3)、将 Uuencode “乱码”存入一个文件,然后在 DOS 下用 uudecode.exe 程序将文件解码。
(4)、将 Uuencode “乱码”存入一个文件,然后在 Windows 下用 Wincode 解码。
Wincode 除支持 UU 编码外也支持 MIME 、Binhex 等编码格式,应用范围颇为广泛。
五、 MIME 方式编码判断及乱码解决方法。
(一)、 Base64 encode 编码判断
Base64 大体格式为:
MIME-Version:1.0
Content-type:text/plain;Charset="us-ascii"
Content-transfer-encoding;base64
....
在乱码前一般有以下几部分“ 信头”:Content - type ( 内容及类型), Charset( 字符集)及 Content-Transfer-encoding( 内容传输编码方式)从以上信息非常好判断,解决方法有:
(1)、将 Base64 encode “乱码”邮件存成一个文本文件,改文件名后缀为 .UUE,然后使用 Winzip 解码。
(2)、将 Base64 encode “乱码”邮件存成一个文件,将文件后缀改为 .EML,由 OutLook Express 打开,就可以自动解码。
(二)、 QP 编码判断
QP 编码大体格式如下:
=A1A=B1Z=A6N=A1I=AT=DA
....
采用 QP 编码的信件也很容易判断,只要乱码内容有很多符号“ = ”就可判断为 QP 编码, QP 乱码解决方法有:
(1)、将 QP-encode “乱码”邮件转寄到自己的邮箱中,然后用支持 QP 解码的电子邮件接收程序(如 Netscape mail 、 Eudora 、 OutLook Express 、 Becky 等)来接收该邮件。
(2)、使用 Winzip 对 Quoted-Printable 解码。必须注意 :
( a ) 在邮件信头中检查、添加这样两行 : Mime-Version : 1.0 Content-Transfer-Encoding: quoted-printable ;
( b ) 信头中间不要空行,信头和信体之间要有一个空行。这样形成的文件,改后缀名为 UUE ,即可双击启动 Winzip 得到解码。
除了上述编码造成乱码外,还有以下两种常见乱码:
(一) HZ 中文乱码
由于网友们可能使用不同的电子邮件收发软件,因此,来自各个网友的邮件内容可能包含着看不懂的乱码,例如,如果看到下面这串乱码 ,你一定看不懂它的意思:HZ- 学软件、用软件、买软件的好伴侣实际上这是一串“简体中文 HZ ”编码,如果使用 Outlook Express 发送邮件时,选用 HZ 编码,而邮件的接收者使用 Eudora 来阅读邮件,看到的就是这些乱码 。正确的方法是,在撰写邮件窗口中,选择“格式”菜单下的“语言”命令,并选中“简体中文 ( GB2312 ) ”项,然后发送邮件。这时,如果你使用Outlook Express ,可以打开“查看”菜单点击“语言”选项中的“简体中文 (GB2312) ”项,或者点击工具栏上“语言”后面的向下箭头,选择“简体中文 (GB2312)”功能项,屏幕出现一个对话框,单击“是”按钮,所有邮件主题中含有指定字符集的邮件应用新的字符集。如果你使用 Eudora 之类的软件,可以使用“南极星”之类的软件,自动转换不同的汉字编码。如果还看不到的话,可将这些编码文本,拷贝到一个文本编辑器中查看。
(二)“半个汉字”乱码
汉字的另一个问题是所谓的“半个汉字”乱码。如果看到下面这串乱码,你一定看不懂它的意思:
“把砑?⒂萌砑?⒙蛉砑?暮冒槁隆薄* ”
由于很多英文编辑软件以字符为单位来处理文本,汉字被删除一半后, 剩余的部分会和相邻的汉字重新组合,使得文本面目全非。因此,除了在输入、删除的时候注意这种问题外,还要注意不要在英文字处理软件中轻易使用“ 字符替换”功能,这往往会把一个汉字的后一个字符和相邻汉字的前一个字符当成一个汉字被替换掉。
对于“半个汉字”乱码,只要将“乱码”邮件存成一个文本文件,然后使用以字符为单位的编辑软件,将“乱码”行的首字符删除,后面的部分就会和相邻的“乱码”重新组合成可识别的汉字。
如果上述方法不能奏效,那么只好告诉对方正确的发送方式,请对方重新发一份邮件给你了。
六、相应编解码软件程序介绍。
判断出乱码信件的编码方法后,再根据自己所拥有的软件种类,选取合适的解码软件。由于不同平台上不 同的软件程序使用方法差别很大,作者无法在此一一说明 ,各位读者可自己参照程序附带的 Help 、 Readme 等文件的说明,自行对乱码邮件进行解码。这里介绍一些 DOS 和 Windows 下的编 / 解码程序以及大体优缺点,供各位使用时参考。
讲了这么多,相信大家对 E-MAIL 的编码有了一定了解,对于一般的编码乱码也有了一定的判别能力了。但 E-MAIL 乱码不仅仅是由于编码不同所造成的,还可能有其它的原因,比如:
1 、该邮件采用了其它少见的编码方法,如 Binhex 或 XXencode 编码等。只要乱码前面有“信头”信息(一般显示了该邮件所用的编码