sina.com.cn
新浪首页|免费邮件|用户注册|网站地图

科技时代

新浪首页 > 科技时代 > 软件 > 网络工具 > 正文
软件分类教程

● 系统工具
● 网络工具
● 常用工具
● 多媒体类
● 图像处理
● 文字编辑
● 休闲娱乐
● 办公软件
● 编程语言
● 操作系统
● 其它软件
● 软件评测
● 主页制作
● 观点评论





电子邮件的乱码原理和实战演习

http://tech.sina.com.cn 2000/04/13  软件世界 

  在接收电子邮件时有时会发现邮件中的内容一片混乱,无法阅读。这主要是发、收邮件的编码和解码方式不统一造成 的。本文介绍乱码生成的原理,并使用常用的收发E-mail的工具成功地模拟出各种编码方式造成的乱码,同时给出了各 种方法来正确阅读这些乱码。

  一、一般原理

  由于历史原因,Internet上有些邮件系统只支持7位的ASCII字符传输,而汉字的内码是8位的,当在 电子邮件中间发送中文时,如果经过这些只支持7位字符的邮件系统,便会将汉字内码的第8位的1全部变为0。因此早期国 内和国外之间发送中文电子邮件时,有的没有经过7位的邮件系统,便可以直接用中文通信。而有的经过了7位的邮件系统, 邮件内容便乱七八糟,只有高手通过编程将字符的第8位重新变为1才可以阅读。

  除了中文邮件外,通过E-mail传送一些二进制文档,如图片、可执行程序及压缩文件等也涉及这个问题。在电 子邮件中一般采用各种邮件编码方式来解决这个问题,将8位的文字预先按照一定的规则进行编码,便可以完好地通过只支持 7位字符的邮件系统了。

  一般情况下,各种新的电子邮件工具都可以自动进行解码。但如果发送方用某种编码方式发送了邮件,而接收方电子 邮件工具设置不同,这时就无法正常阅读,需要调整设置选项。此外,如果接收方没有对应的解码工具,或者接收方用的是另 外一种解码工具,也同样无法正常阅读。还有一种情况是发送方从其他系统中转发了编码过的内容给你,这时电子邮件工具只 能将原编码过的内容原封不动地显示出来,用户需要手工将编码剪贴下来,作相关的处理。

  此外,不同的汉字编码如GB码、BIG5、HZ等之间也会生成乱码。这可通过支持不同内码的汉字系统来正确显 示。

  二、实战环境

  实战环境在中文Windows98上,安装了微软的OutLook Express和Netscape Co mmunicator软件。拥有一个E-mail帐号,可以通过Telnet方式登录。本文在这个环境下实现E-ma il乱码的再现,并给出了解决示例。

  您的实际环境可能和其稍有区别,但不要紧,本文对一种乱码介绍了多种再现和解决方法,总有一种会类似您的环境 。

  三、大战Quoted-Printable编码

  1.认识Quoted-Printable编码

  其外观类似“=C2=D2=C2=EB= D4=AD=C0=ED=BA=CD=CA=B5=D5=BD= D1=DD=CF=B0”。它将一个8位的字符表示为3个字符:一个“=”和两个十六进制数。由于汉字编码一般以两个 8位表示一个汉字,所以该编码中表示一个汉字需要6个字符。如该例子中的“=C2=D2”表示“乱”字,“=C2=E B”表示“码”字。

  2.生成Quoted-Printable编码

  我们可以用各种武器再现Quoted-Printable编码,你可以根据你的环境用下面方法中的一种生成Q uoted-Printable编码的邮件,然后就可以用后续介绍的方法看到乱码的真面目。

  武器1:OutLook Express

  首先要设置武器。在OutLook Express中选择“工具/选项”菜单,在出现的对话框中点击“发送” 页,出现图1对话框。

  在“邮件”发送格式下点击“纯文本”,并点击其右端的“设置”按钮,出现图2,在其中的“文本的编码方式”后 选中“Quoted Printable”,点击两次确定。回到OutLook Express主菜单。此时,你的武 器已经可以生成Quoted Printable编码了。

  点击“新邮件”按钮,出现发送邮件的窗口,输入邮件内容。(为了自己能够收到,可在收件人地址中输入自己的E -mail地址)。在点击“发送”之前确保选中“格式/纯文本”和“格式/语言/简体中文/gb2312”。如图3。

  点击发送,一个Quoted Printable编码的邮件就发出去了。

  武器2:Netspcae Mail

  首先设置武器,选择“Edit/Preference”菜单,展开“Mail& Groups”,点击“Me ssages”,出现图4。

  点击其中的“More Options”按钮,在图5对话框中选中“Using the‘qutoted p rintable’ MIME encoding”选项。

  点击数次OK按钮,武器设置完毕。

  在Netscape Mail的主菜单中,点击“New Msg”按钮,不需要再作其他设置,同上将自己设置 为收信人,并输入邮件标题和内容,发送后,一个同样的Quoted Printable编码的邮件就发出去了。

  3.查看Quoted-Printable编码原文

  现在我们可以查看一下前面的Quoted-Printable编码的邮件是何面目。根据你的环境,可以使用如 下武器之一。

  武器1:Telnet

  直接Telnet到Unix系统E-mail服务器上,输入帐号密码后进入E-mail服务器的提示符。输入 mailx命令,出现各个邮件标题。输入“more邮件号”,可以看到邮件内容。对话过程如下所示:其中,黑体为输入 内容,其余为显示内容,所有输入字母均为小写。

  UNIX(r) System V Release4.0(yc)

  login: xyx

  Password:

  Last login: Tue Aug2419:20:17 from202.120.127.202

  Sun Microsystems Inc. SunOS5.4 Generic July1994

  You have mail.

  yc% mailx

  mailx version5.0 Fri Jul1521:21:05 PDT1994 Type? fo r help.

  "/var/mail/xyx":2 messages1 new2 unread

  U1 xu Tue Aug2420:0225/750=?gb2312?B?wtLC6w==?=

  >N2 Xu Yingxiao Tue Aug2420:1120/667=?gb2312?B?wtLC 6w==?=

  ? more1

  Message1:

  From xyx@yc.shu.edu.cn Tue Aug2420:02 CDT1999

  From:"xu"

  To:

  Subject:=?gb2312?B?wtLC6w==?=

  Date: Tue,24 Aug199919:03:01+0800

  Mime-Version:1.0

  charset="gb2312"

  Content-Transfer-Encoding: quoted-printable

  X-Priority:3

  X-Msmail-Priority: Normal

  X-Mimeole: Produced By Microsoft MimeOLE V4.72.3110 .3

  =B5=E7=D7=D3=D3=CA=B C=FE=C2=D2=C2=EB=D4=A D=C0=ED= BA=CD=CA=B5=D5=BD=D1= DD=CF==B0

  其中的“=B5=E7=D7=D3=D3=CA=BC=F E=C2=D2=C2=EB=D4=AD=C0= ED=BA=CD=CA=B5=D5= BD=D1=DD=CF==B0”即为“电子邮件乱码原理和实战演习”的Qu oted-Printable编码。

  武器2:Netscape Mail

  使用Netscape Mail接收上面所发的电子邮件。有可能因为Netscape Mail功能强大,已 经将编码正确解码了,“电子邮件乱码原理和实战演习”几个字赫然在目。不过我们可以选中邮件看邮件时再选择Netsc ape Mail的“View/Page Source”菜单,则其马上露出本来面目,如图6。

  武器3:OutLook Express

  使用OutLook Express接收上面所发的电子邮件。可能同样很不幸,OutLook Expres s也将其编码正确解码了,“电子邮件乱码原理和实战演习”几个字赫然在目。

  OutLook Express没有类似Netscape Mail的“View/Page Source” 菜单,但是我们可以在选中邮件看邮件时再选择OutLook Express的“文件/另存为”菜单,在出现的对话框 中选择保存目录,输入文件名,保存类型选择“邮件(*.eml)即可。然后使用普通的文本编辑器如NotePad打开 这个以.eml为后缀的文件。一个和图7同样的内容便出现了。

  也可以在邮件标题上点击邮件,选择“属性”菜单,在出现的窗口中点击“详细资料”,如图7,再点击其中的“邮 件的源文件”即可。

  4.解决Quoted-Printable编码

  前面我们已经看到OutLook Express和Netscape Mail都可以自动对Quoted-P rintable进行解码。但若你的软件未设置好,或你原先使用的是Telnet工具或收到的是别人转发过来的邮件。 则仍会出现乱码,发生不能正确阅读的情况。

  我们可以使用以下武器来解决之。

  武器1:OutLook Express

  如果是软件设置问题,可以在OutLook Express中选择“查看/语言/简体中文(GB2312)” 即可,如图8。你也可以选择其他如“通用字符(UTF-8)”,便会发现无法阅读。

  如果邮件是别人转发过来的,或你用的是其他电子邮件工具,只能看到形如“=B5=E7=D7=D3=D3=C A=BC=FE=C2=D2=C2=EB=D4=AD=C0=ED=BA=CD=CA=B5=D5=BD=D1=DD =CF==B0”的本来面目,这时可以将这段代码粘贴到文本编辑器中,并在其前面加入一段文本,形成如图9的内容。

  注意,在“Content-Transfer-Encoding:quoted-printable”下要留 有一行空行。

  将这段文本用文本格式下来,文件名后缀为.eml,目录任意。然后在Windows“我的电脑”或文件管理器 中找到该文件,双击之,将自动启动OutLook Express打开它。

  武器2:Netscape Mail

  如果是软件设置问题,在Netscape中只要选择“View/Encoding/Simplifed Ch inese(GB2312)”即可。如图11。

  你也可以选择其他如“通用字符(UTF-8)”,便会发现无法阅读。

  如果邮件是别人转发过来的,或你用的是其他电子邮件工具,也可以使用图10所示方法,将其保存为某个文件如文 件名为:xyxtest.txt。但第一行需增加一行“From-”,如图12。

  文件后缀可有可无,保存在哪个目录要看Netscape Mail的设置。可以在图4的界面中点击“Mail Server”,再在右端点击“More Options...”按钮。在出现的对话框中查看“Local mail ”后的目录项。如对于图13的设置,应该将文件保存在c:\xyx目录下。

  将Netscape Communicator关闭并重新运行,则与Inbox并列出现一项“xyxtest .txt“,选中该项将出现邮件内容。

  武器3:DOS下汉字输入工具

  可以使用DOS下的汉字输入工具手工识别Quoted-Printable编码,如对前文的“=B5=E7= D7=D3=D3=CA=BC= FE=C2=D2=C2=EB=D4=AD=C0=ED=BA=CD=CA=B5= D5= BD=D1=DD=CF==B0”,以开头几个“=B5=E7=D7=D3”转换为十进制,为:“=181= 231=215=211”。在DOS下的汉字输入状态下,按住“ALT”键,按动键盘右端小键盘的数字键,输入“18 1”,抬起“ALT”,再按住“ALT”键,按动键盘右端小键盘的数字键,输入“231”,则屏幕上出现解码后的第一 个字“电”,以此类推,可以识别所有内容。

  四、大战UTF-7编码

  1.认识UTF-7编码

  其外观类似“+dTVbUJCuTvZ OcXgBU590BlSMW55iGG8UTmA-”,每行开头和 结尾都分别有“+”和“-”符号。

  2.生成UTF-7编码

  武器1: OutLook Express

  只要在发送邮件前选择“格式/语言/通用字符(UTF-7)”即可。如图15。

  武器2: Netscape Mail

  只要先确认在图5的对话框中选中“As is”选项,发送邮件时,先在发送窗口中选择“格式/语言/通用字符 (UTF-7)即可。.查看UTF-7编码原文

  武器1:Telnet

  同前登录到E-mail服务器上,输入mailx后可以看到邮件内容如下:

  yc% mailx

  mailx version5.0 Fri Jul1521:21:05 PDT1994 Type? fo r help.

  "/var/mail/xyx":1 message1 new

  >N1 xu Sat Aug2817:3024/699=?utf-7?B?K1RuRjRBUS0=?=

  ? more1

  Message1:

  From xyx@yc.shu.edu.cn Sat Aug2817:30 CDT1999

  From:"xu"

  To:

  Subject:=?utf-7?B?K1RuRjRBUS0=?=

  Date: Sat,28 Aug199916:31:29+0800

  Mime-Version:1.0

  charset="utf-7"

  Content-Transfer-Encoding: quoted-printable

  X-Priority:3

  X-Msmail-Priority: Normal

  X-Mimeole: Produced By Microsoft MimeOLE V4.72.3110 .3

  +dTVbUJCuTvZOcXgBU590BlSMW55 iGG8UTmA-

  其中的“+dTVbUJCuTvZOcXgBU590Bl SMW55iGG8UTmA-”即为“电子邮件乱 码原理和实战演习”的UTF-7编码。

  武器2:OutLook Express

  使用OutLook Express接收上面所发的电子邮件,在OutLook Express中选择“查看 /语言/简体中文(GB2312)”即可看到编码内容。

  也可以在选中邮件看邮件时再选择OutLook Express的“文件/另存为”菜单,在出现的对话框中选 择保存目录,输入文件名,保存类型选择“邮件(*.eml)即可。然后使用普通的文本编辑器如NotePad打开这个 以.eml为后缀的文件。

  或在邮件标题上点击邮件,选择“属性”菜单,在出现的窗口中点击“详细资料”,再点击其中的“邮件的源文件” 即可。

  武器3:Netscape Mail

  在如图11选中邮件看邮件时,选择Netscape Mail的“View/Encoding/Simpli fed Chinese(GB2312)”即可直接看到乱码内容。此时选“View/Page Source”菜单也 同样可以看到其内容。

  4.解决UTF-7编码

  OutLook Express和Netscape Mail都可以对Quoted-Printable进行 解码。但若你的软件未设置好,或你原先使用的是Telnet工具或收到的是别人转发过来的邮件。则仍会出现乱码发生不 能正确阅读的情况。

  我们可以使用以下武器来解决之。

  武器1:OutLook Express

  在OutLook Express中选择“查看/语言/通用字符(UTF-7)”即可看到解码后的内容。

  如果邮件是别人转发过来的,或你用的是其他电子邮件工具,只能看到编码内容,也可将编码内容剪贴下来,并在前 面加上一段,形成如下内容:

  From:

  To:

  Subject:

  Mime-Version:1.0

  Content-Type:text/plain; charset="utf-7"

  Content-Transfer-Encoding:7bit

  +dTVbUJCuTvZOcXgBU590BlSMW55iGG8UTmA-

  将这段文本用文本格式下来,文件名后缀为.eml,目录任意。然后在Windows“我的电脑”或文件管理器 中找到该文件,双击之,将自动启动OutLook Express打开它,选“查看/语言/通用字符(UTF-7)” 即可看到解码后的内容。

  武器2:Netscape Mail

  选择Netscape Mail的“View/Encoding/Unicode(GB2312)”即可。也 可如前所示编码,剪贴下来后,加上一段,并在第一行加上一行“From-”,用Netscape Mail来查看。

  五、大战HZ编码

  1.认识HZ编码

  其外观类似“电子邮件乱码原理和实战演习”,它是一种屏蔽了最高位的汉字 表示方法,每行开头和结尾都分别有“”和“”符号。

  2.生成HZ编码

  武器:OutLook Express

  只要在发送邮件前在图1的界面中选择“格式/语言/简体中文(HZ)”即可。

  3.查看HZ编码原文

  武器1:Telnet

  同前登录到E-mail服务器上,输入mailx后可以看到邮件内容如下:

  yc% mailx

  mailx version5.0 Fri Jul1521:21:05 PDT1994 Type? fo r help.

  "/var/mail/xyx":1 message1 new

  >N1 xu Sun Aug2910:3023/672=?hz-gb-2312?B?fntCUkJrf n

  ? more1

  Message1:

  From xyx@yc.shu.edu.cn Sun Aug2910:22 CDT1999

  From:"xu"

  To:

  Subject:=?hz-gb-2312?B?fntCUkJrfn0=?=

  Date: Sun,29 Aug199909:23:13+0800

  Mime-Version:1.0

  charset="hz-gb-2312"

  Content-Transfer-Encoding: quoted-printable

  X-Priority:3

  X-Msmail-Priority: Normal

  X-Mimeole: Produced By Microsoft MimeOLE V4.72.3110 .3

  电子邮件乱码原理和实战演习

  其中的“电子邮件乱码原理和实战演习”即为“电子邮件乱码原理和实战演习 ”的HZ编码。

  武器2:OutLook Express

  同前述UTF-7编码查看方法。

  武器3:Netscape Mail

  在如图11选中邮件看邮件时,选择Netscape Mail的“View/Encoding/User D efined”即可直接看到乱码内容。此时选“View/Page Source”菜单也同样可以看到其内容。

  4.解决HZ编码

  武器1:OutLook Express

  在OutLook Express中选择“查看/语言/简体中文(HZ)”即可看到解码的内容。 若剪贴下来 ,可在其前面加上一段后内容如下:

  From:

  To:

  Subject:

  Mime-Version:1.0

  charset="hz-gb-2312"

  Content-Transfer-Encoding:7bit

  电子邮件乱码原理和实战演习

  武器2:Netscape Mail

  选择Netscape Mail的“View/Encoding/Simplifed Chinese(GB 2312)”即可。

  若剪贴下来处理,则同前增加一行“From-”。

  六、大战BASE64编码

  1.认识BASE64编码

  一般以附件发出的各种文件都使用这种编码。其内容是一大堆杂乱无章但都可以正常显示的ASCII字符。邮件头 上有“Content-Transfer-Encoding: base64”字样。

  2.生成BASE64编码

  武器1:OutLook Express

  在图2“文本的编码方式”后选中“Base64”,点击两次确定。回到OutLook Express主菜单 。此时,输入的邮件内容将以Base64编码方式发出。

  也可将要发送的内容写入文件,文件名以.exe为后缀,如保存在m5.exe文件中,然后通过附件方式发出。

  武器2:Netscape Mail

  同上将要发送的内容写入文件,文件名以.exe为后缀,如保存在m5.exe文件中,然后通过附件方式发出。

  3.查看BASE64编码原文

  武器1:Telnet

  同前登录到E-mail服务器上,对于使用OutLook中第一种方法发出的邮件,可以看到邮件内容如下:

  Message1:

  From xyx@yc.shu.edu.cn Sun Aug2911:08 CDT1999

  From:"xu"

  To:

  Subject:=?gb2312?B?wtLC6w==?=

  Date: Sun,29 Aug199910:09:25+0800

  Mime-Version:1.0

  charset="gb2312"

  Content-Transfer-Encoding: base64

  X-Priority:3

  X-Msmail-Priority: Normal

  X-Mimeole: Produced By Microsoft MimeOLE V4.72.3110 .3

  tefX09PKvP7C0sLr1K3A7brNyrX VvdHdz7ANCg==

  对于用附件发出的邮件,也可看到类似内容。其中的“tefX09PKvP7C0sLr1K3A7brNyrX VvdHdz7ANCg==”即为“电子邮件乱码原理和实战演习”的Base64编码。

  武器2:OutLook Express

  类似前述UTF-7编码查看方法,可用另存或属性菜单看到Telnet方法所看到的相同内容。

  武器3:Netscape Mail

  类似前述UTF-7编码查看方法,选“View/Page Source”菜单看到其内容。

  4.解决BASE64编码

  OutLook Express和Netscape Mail都可以自动对Base64进行解码,如果使用的 是附件方式,则可将附件保存后打开查看。也可以剪贴下来,加上如前解决HZ编码类似的信息(将其中的“Content -Transfer-Encoding:7bit”改为“Content-Transfer-Encoding: b ase64”),保存后用OutLook Express或Netscape Mail查看。

  七、大战Uuencode编码

  1.认识Uuencode编码

  在一堆杂乱的字符首行有“begin…”字样,结尾处有“end”字样。

  2.生成Uuencode编码

  武器1:OutLook Express

  在图2中选中“Uuencode”,点击两次确定。回到OutLook Express主菜单。则以后的附件 将以Uuencode编码方式发出。

  如可以将“电子邮件乱码原理和实战演习”保存为m6.txt文件,用附件方式发出。

  武器2:Netscape Mail

  在发送邮件的界面中,发送前选择“View/Options”菜单,选中“Uuencode instead of MIME for Attachment”,再点击“Send”发出邮件,则附件将以Uuencode编码方式 发出。

  如可以将“电子邮件乱码原理和实战演习”保存为m5.exe文件,用附件方式发出。

  武器3:Telnet

  许多Unix系统中在提示符下输入“vi m5.txt”,按“i”键开始插入字符,输入“电子邮件乱码原理 和实战演习”,按ESC,再按:wq,存盘退回Unix提示符。输入uuencode m5.txt m5.txt> m5.en,将邮件内容使用uuencode编码至m5.en文件中。则m5.en中为Uuencode编码内容。可 以将其传到本地计算机,用任何E-mail工具作附件发出,也可使用Unix中发送邮件的命令,如:yc% mail x xyx@yc.shu.edu.cn

  Subject:乱码

  ~r m5.en

  "m5.en"4/61

  EOT其中粗体、下划线字体为输入内容,最后按“Ctrl+D”发出邮件。

  3.查看Uuencode编码原文

  武器1:Telnet

  同前登录到E-mail服务器上,对于使用OutLook中第一种方法发出的邮件,可以看到邮件内容如下:M essage1:

  From xyx@yc.shu.edu.cn Sun Aug2911:40 CDT1999

  From:"xu"

  To:

  Subject:乱码

  Date: Sun,29 Aug199910:41:32+0800

  X-Priority:3

  X-Msmail-Priority: Normal

  X-Mimeole: Produced By Microsoft MimeOLE V4.72.3110 .3

  begin666 m6.txt

  ?7T]/*O/["TL+KU*W [;K-RK75O='=S[-"@``

  end

  其中“begin”至“end”之间的内容即为“电子邮件乱码原理和实战演习”的Uuedncode编码。

  武器2:OutLook Express

  类似前述UTF-7编码查看方法,可用另存或属性菜单看到Telnet方法所看到的相同内容。

  武器3:Netscape Mail

  类似前述UTF-7编码查看方法,选“View/Page Source”菜单看到其内容。

  4.解决Uuencode编码

  OutLook Express和Netscape Mail都可以自动对Quoted-Printable 进行解码,如果使用的是附件方式,则可将附件保存后打开查看。

  如果使用的是Telnet工具收发E-mail,也可以使用uudecode工具将其解码,如下:

  yc% mailx

  mailx version5.0 Fri Jul1521:21:05 PDT1994 Type? fo r help.

  "/var/mail/xyx":1 message1 new

  >N1 xu Sun Aug2912:0725/605乱码

  ? s1 m

  "m" [New file]25/605

  ? x

  yc% uudecode m

  yc% more m6.txt

  电子邮件乱码原理和实战演习

  其中将邮件保存为文件名m,然后用“uudecode m”将其解码,解码后即可生成解码后的文件,解码后文 件名和发邮件时的文件名相同,也可通过查看邮件中“begin”后的字符串得到文件名。

  八、大战BIG5

  类似“环毙厩揭”的文字一般是Big5码。

  要再现这种乱码,只要将中文系统设置为Big5码输入方式,将邮件发送出去即可,即使没有支持Big5码的中 文系统,也可以访问一些Big5码的站点,看到Big5码,并可以将其剪贴发送。发送时可将编码方式设置为Big5或 用户自定义方式。

  收到这些编码的邮件时,用一些支持多种编码的中文系统,如中文之星、四通利方、南极星等,在其中选择Big5 显示就可以正常显示了。如前面的编码转换成GB码后为“远距离教学课程”。

     

  【相关论坛】 【发表评论】  


网站简介 | 用户注册 | 广告服务 | 招聘信息 | 中文阅读 | Richwin | 联系方式 | 帮助信息 | 网站律师

Copyright © 1996 - 2000 SINA.com, Stone Rich Sight. All Rights Reserved

版权所有 四通利方 新浪网