精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>编程开发>>● VB和Basic>>〓〓..网络程序开发..〓〓>>转载:E-MAIL编码——雾里看花

主题:转载:E-MAIL编码——雾里看花
发信人: garfieldmao()
整理人: fishy(2000-08-02 22:44:20), 站内信件
我问了这个问题十年了,都没人会,唉,只有靠自己。
你们看清楚了!!!
至于看不看得懂,那就是另一回事了。 ^_^

==================================================

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等,w
incode的使用原理同DOS下的uuencode、uudecode相同,只是利用了windows的界
面,从而使操作更为简便。wincode程序除支持UU编码外,同时支持mime,Binhe
x等编码格式,应用范围颇为广泛。 

  我们以上所介绍的UU编码并非只能对中文进行编码,任何你要寄出的文件包
括.exe等二进制文件都可按照编码——>发送——>收信——>解码还原的步骤进行
传送。 

  二、MIME ( Multipurpose Internet Mail Extention )标准的编码 

  UU编码解决了E-MAIL只能传送ASCII文件的问题,但我们可以从编解码的过程
看出其运用并不很方便,因而随后又发展出一种新的编码标准即MIME( Multipur
pose Internet Mail Extention )译作“多媒体邮件传送模式”。顾名思义,这
种编码标准支持传送多媒体文件,可在一封电子邮件中附加各种格式的文件一起
发送。 

  其实MIME定义的是一种编码规格,亦或可以说是一类编码的统称,能够符合
MIME标准的编码方式并非一种,而只要符合MIME规格便可顺利传送,在MIME定义
下有两种编码方式Base64和QP ( Quote-Printable ),QP的规则是对资料中的7位
无须重复编码,仅将8位数据转成7位,QP编码适用于非ASCII码的文字内容,例如
我们的中文文件。而Base64的规则是将整个文件重新编码成7位,通常适用于传送
二进制文件。 

  一般编码方式不同会影响编码之后的文件大小,而采用MIME标准编码的E-MA
IL软件一般能自动判别你的邮件是采用何种编码,然后自动选择用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 (内容及类型),Cha
rset(字符集)及Content-Transfer-encoding(内容传输编码方式)从以上信息非常
好判断,解决方法有: 

  (1)、将Base64 encode“乱码”邮件存成一个文本文件,改文件名后缀为.U
UE,然后使用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-Tr
ansfer-Encoding: quoted-printable ; 

  ( b )信头中间不要空行,信头和信体之间要有一个空行。这样形成的文件,
改后缀名为UUE,即可双击启动Winzip得到解码。 

  除了上述编码造成乱码外,还有以下两种常见乱码: 

  (一) HZ中文乱码 

  由于网友们可能使用不同的电子邮件收发软件,因此,来自各个网友的邮件
内容可能包含着看不懂的乱码,例如,如果看到下面这串乱码,你一定看不懂它
的意思:HZ-学软件、用软件、买软件的好伴侣实际上这是一串“简体中文HZ”编
码,如果使用Outlook Express发送邮件时,选用HZ编码,而邮件的接收者使用E
udora来阅读邮件,看到的就是这些乱码。正确的方法是,在撰写邮件窗口中,选
择“格式”菜单下的“语言”命令,并选中“简体中文( GB2312 )”项,然后发
送邮件。这时,如果你使用Outlook Express,可以打开“查看”菜单点击“语言
”选项中的“简体中文(GB2312)”项,或者点击工具栏上“语言”后面的向下箭
头,选择“简体中文(GB2312)”功能项,屏幕出现一个对话框,单击“是”按钮
,所有邮件主题中含有指定字符集的邮件应用新的字符集。如果你使用Eudora之
类的软件,可以使用“南极星”之类的软件,自动转换不同的汉字编码。如果还
看不到的话,可将这些编码文本,拷贝到一个文本编辑器中查看。 

  (二)“半个汉字”乱码 

  汉字的另一个问题是所谓的“半个汉字”乱码。如果看到下面这串乱码,你
一定看不懂它的意思: 

  “把砑⒂萌砑⒙蛉砑暮冒槁隆薄*” 

  由于很多英文编辑软件以字符为单位来处理文本,汉字被删除一半后,剩余
的部分会和相邻的汉字重新组合,使得文本面目全非。因此,除了在输入、删除
的时候注意这种问题外,还要注意不要在英文字处理软件中轻易使用“字符替换
”功能,这往往会把一个汉字的后一个字符和相邻汉字的前一个字符当成一个汉
字被替换掉。 

  对于“半个汉字”乱码,只要将“乱码”邮件存成一个文本文件,然后使用
以字符为单位的编辑软件,将“乱码”行的首字符删除,后面的部分就会和相邻
的“乱码”重新组合成可识别的汉字。 

  如果上述方法不能奏效,那么只好告诉对方正确的发送方式,请对方重新发
一份邮件给你了。 

  六、相应编解码软件程序介绍。 

  判断出乱码信件的编码方法后,再根据自己所拥有的软件种类,选取合适的
解码软件。由于不同平台上不同的软件程序使用方法差别很大,作者无法在此一
一说明,各位读者可自己参照程序附带的Help、Readme等文件的说明,自行对乱
码邮件进行解码。这里介绍一些DOS和Windows下的编/解码程序以及大体优缺点,
供各位使用时参考。 

  讲了这么多,相信大家对E-MAIL的编码有了一定了解,对于一般的编码乱码
也有了一定的判别能力了。但E-MAIL乱码不仅仅是由于编码不同所造成的,还可
能有其它的原因,比如: 

  1、该邮件采用了其它少见的编码方法,如Binhex或XXencode编码等。只要乱
码前面有“信头”信息(一般显示了该邮件所用的编码。 

--
┏━━━━━━━━━━━━━━━━━━━━━┓
┃请在[将本文章寄一份给原作者]之后打“√”。┃
┃━━━━━━━━━━━━━━━━━━━━━┃
┃ VB编程园 Http://maozai.home.china.com  ┃
┃        猫仔(Maozai/Garfield) CEO         ┃
┃         Email:[email protected]           ┃

※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.105.150.204]

[关闭][返回]