发信人: zyhgz()
整理人: snowypeng(2002-05-22 14:44:59), 站内信件
|
鉴于最近和别人通信时总是收到‘乱码’,特把我看到的一篇关于伊妹儿编码的 老文章摘录如下,大家可以作个参考:
=======================================================================
解读天书 -- 谈 Internet E-mail 的编码与解码
(原文刊载於网际空间杂志85年10月号)
■前言
有人说,Internet是个无远弗届的世界,尤其是E-mail的传递,可让您的讯 息迅速地传送到收件人手中,大量减少了一般邮件所必须花费的费用及时间。 的确,E-mail的使用几乎是所有网路人的必要项目,在E-mail的使用上,更早 已跨越了只能传送文字的限制,不但可以传送8bits的中文字,还可用attach档 案的方式传送一些非文字的档案,它的使用可说是日益普及。但许多人仍会疑 惑,非文字的「档案」怎麽传送?又为什麽常常会有人收到一堆乱七八糟的「乱 码」呢?本文撰写的方式,将尽量以浅显易懂的叙述,说明这些mail如何的传 送、如何的顺利解读,让您不再「望天书而兴叹」!本文并将着重於「如何解 码」,对於编码的原理及方式则不多赘述,因为对於一般使用者而言,原理并 不重要,能够顺利读到亲朋好友的来信才是最重要的吧!
■为什麽要编码
在Internet里,E-mail的传送是只能传送US-ASCII格式的文字讯息,ASCII 是7位元码,而非ASCII格式的档案,在传送过程中若不先经过编码,先编成 7位元码再传送,则在传送过程中会因为这7位元的限制而遭到拆解,拆解之 後只会让收信方看到一堆乱七八糟不知所云的东西。经过编码後的资料,在传 送过程中可顺利传送,不会有「被截掉一个bit」的危险,但是收信方必须具 有解码的程式,将这份经过编码的东西还原,才能解读「天书」,看到寄信人 要传送的讯息是什麽。
尤其有一点要注意的是,大部份的人普遍会有「文字档不需要编码」的观念, 但我们的中文是属於8位元的文字,它并不是标准的ASCII格式,由於在台湾 中文是通行的文字,所以台湾的mail server都已能够处理BIG-5中文码,因而 的确是不需要做这种编码、解码的动作,可以直接传送。但如果要送中文信到 国外,还是需要经过这种手续才能传送,因为外国的mail server是无法辨认中 文码的。中文码在经过一些未支援中文码的传递主机时,依然会被截掉一个 bit,造成支离破碎无法读取的惨剧。而经过编码的中文信,收信人收到後,将 档案解码还原,也是需要有中文系统才能看您写的中文信。笔者常与几位赴海 外留学的同学们通信,未免得英文能力表达能力不佳,也是习惯用中文来写 mail,只是他们必须在自己的PC上先安装上中文windows,才能顺利使用中文 来沟通哩!在此也顺便提醒读者们,若准备出国留学,建议您带着一套中文系 统出去,国外可不容易买到中文软体唷!
■UU编码(uuencode与uudecode)
uuencode原来是unix上用的一种编码程式,後来有人改写成为在DOS亦可 执行的程式,而在图形介面的windows系统逐渐成为主流之时,自然这种功能 也被运用在windows软体上。在早期要传送非US-ASCII型式的资料,最常用的 便是这种UU编码(Unix-to-Unix encoding)方式。执行的方法,在DOS之下 是先使用一种uuencode.exe的程式将档案编成7位元ASCII档案,把它寄出, 收信人收到後,可以用uudecode.exe的程式将这份资料还原为原来的档案。而 windows的程式则通常是用一个软体便可执行uuencode及uudecode的功能了。
笔者在此对於UU编码的示范说明,便是以DOS之下的uuencode、uudecode 程式以及在windows之下的wincode软体来做一范例。以上这些程式均属於 shareware,可在各大Ftp Server找到,读者朋友可使用网路上的archie功能来寻 找及取得,至於取得的方法,本文中不再多作介绍。
自ftp server取得uuencode及uudecode二支DOS程式後,我们可试着将要传 送的档案做一编码。假设我们有这样子的一段话,以中文Big5码写成的:
「大家好!我是梁孟君,很高兴有机会在此向大家自我介绍,希望有缘与您做朋友。」
这一段文字您可能是使用某些文字编辑软体写成,例如以PE2打完这段文字 後,以「myself」为档名存档。uuencode及uudecode的使用方式如下:
uuencode file_1 file_2 ==>file_1为原始档案之档名 file_2为编码後之档名(可自取一个档名)
如果您不预设这个file_2档名,它内定会产生一个名为file_1.uue的档案, 接着可将file_2寄出(编好後的file_2看起来是一堆乱码)。
收信方收到後存档,档名取为file_3,再使用uudecode.exe解码: uudecode file_3,这时会产生一个和原先一模一样的file_1
我们以上例的「myself」来看编码的结果:
uuencode myself,按下enter键後,我们可以看到在磁碟里多出了一个myself.uue 的档案,用文书软体叫出这个myself.uue後,内容如下:
section 1 of uuencode 5.21 of file myself by R.E.M.
begin 644 myself MI&JN8:9NH4FGVJQ/L>>IFrom [email protected] Mon Sep 2 11:57:11 1996 Return-Path: Received: from maggie.seed.net.tw ([139.175.49.16]) by iii.org.tw (4.1/SMI- 4.1) id AA29902; Mon, 2 Sep 96 11:57:03 CST Message-Id: <[email protected]> X-Sender: [email protected] X-Mailer: Windows Eudora Light Version 1.5.4 (32) Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=====================_841608510==_" Date: Mon, 02 Sep 1996 12:08:30 +0800 To: [email protected] From: Maggie Liang Subject: Test MIME mail! X-Attachments: C:\code\mimeqp\Mimeqp.exe; Status: R
--=====================_841608510==_ Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable
=B3o=A4@=AB=CAmail=A1A=ACO=ADn=B4=FA=B8=D5MIME=AA=BA=A5\=A F=E0=A1A=A8=C3=AA= =FE=B1H=A4@=AD=D3binary=C0=C9=AE=D7 mimeqp.exe=A1C
--=====================_841607721==_ Content-Type: application/octet-stream; name="Mimeqp.exe" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="Mimeqp.exe"
TVoQABYAAQAgAAAA//95AoAAAAAAAAAAIgAAAAEA+yByagEAAAAAAAAA AAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAA (因编码後文件太长,以下之base64码省略)
我们可以很清楚地看到,这一封送出去的mail中,其head中已很清楚地定义 这是遵循MIME ver1.0的规格,并且前面一段的文字定义「Content- Transfer-Encoding: quoted-printable」是用QP编码,後面附寄的binary档案, 则在这几行中也交待清楚: Content-Type: application/octet-stream; name="Mimeqp.exe" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="Mimeqp.exe" 是要寄一个名为mimeqp.exe的档案,并且已经用Base64编过码了。
其实这些讯息都是我的Eudora软体在送信时自动完成编码、加注、寄出等 动作,我只在信件中写下这些字「这一封mail,是要测试MIME的功能,并 附寄一个binary档案mimeqp.exe。」然後选择我的attach档案,Eudora 在把信件送出时自动转换变成了上面那些文字与符号,将这些讯息送到了mail server,经由mail server的传递送到了收信人的mail server。而收信人在 收信时,如果他也用这种支援MIME格式的软体来收信,那麽他的软体在读取 mailserver送过来的讯息时,会自动再翻译回来「这一封mail,是要测试 MIME的功能,并附寄一个binary档案mimeqp.exe。」而且把这个附寄的 mimeqp.exe档案存在他的硬碟里,他收到的是一段完整的文字,以及一个完整 的档案,而不是有如天书般的乱码。
如果很不幸地,收信人没有这种支援MIME的软体,他看到的东西就是我们 上面那些一大段的符号了。另外,上封mail笔者是为了测试QP编码,所以在 文字部份也指定编码,因而形成「=B3o=A4@=AB=CAmail=A1A」这样子的符 号,但如同本文一开始所述,事实上在台湾的mail server都能够处理中文码, 中文码可以不用编码就寄出。如果把QP编码的功能取消,亦即文字部份不先 编码而直接寄出,则这位没有MIME软体的收信人是可以看到完整的原文的。
这位不幸地收信人如果恰好是您,别急,您仍然可以先将这份天书存档,然 後使用一些decode软体把它翻译回来的。但目前笔者尚未找到可以同时处理QP 与Base64的解码软体,若您收到含有QP码又有Base64码的mail,可能只得分 二次处理了。
在Base64码的部份,您可以使用前文所介绍之wincode软体来执行decode工 作,只要将decode type设为Base64即可,方式如同UU码。可惜的是wincode 并没有支援QP码。
笔者在此另外再介绍一个於DOS下执行的程式:base64.zip。读者们可用 archie寻找ftp server中是否有这个程式。这个压缩档解压缩後会产生encode64.exe 与decode64.exe二个档以及其说明档base64.doc。使用方法非常简单,举例而言, 若要将一个名为test.com的档案编码,只要以下列指令:
encode64 test.com
按下enter之後,它会自动产生test.64这个档案,其内容便是test.com的base64 编码。如欲解码,亦只要以下列指令:
decode64 test.64
便可以把该档案还原。因此倘若您没有可支援MIME的mail软体,您只要将收 到的mail先存档,例如存成一个名为「myfile」的档案,然後去执行decode 功能,不论您用的是wincode或是decode64,它会依据这一行的记录,把档案 还原回来的档名(在"name="之後的档名)。
Content-Type: application/octet-stream; name="test.com"
至於QP编码,笔者尚未找到适合的windows软体,因而在此介绍的是二支 DOS程式:cvnt_qp与mimeqp。同样地,我们可以在ftp server找到这二支 程式,其档名分别是cnvt_qp.zip与mimeqp.zip。其使用方法与前面所介绍的 base64差不多。
cnvt_qp在解压缩之後,会产生cnvt_qp.exe,除了一个说明档qp.doc外, 作者尚附上其C语言写成的原始程式码,cnvt_qp.c,有兴趣的读者可自行参 考这支程式的设计。使用上,执行cnvt_qp.exe後,会出现一简单的功能表, 让您选择是要将8bits文字档encode成QP码,或是将QP码decode成一般文 字档。选择您需要的项目後,只要再输入您要encode或decode的档名即可。
mimeqp的使用也相当简便,其指令如下,亦可以mimeqp -? 来看其说明:
mimeqp -e filename ? 将档案编码(encode) mimeqp -d filename ? 将档案解码(decode)
■ Binhex编码
Binhex的编码方式较常用於Mac机器,在PC上是较少使用的一种编码方式。 一般PC上的mail软体,亦多数支援MIME的规格,少有支援Binhex格式。在 笔者常用的mail软体中,唯Eudora具有这种功能,可直接解读Binhex之编码。 如果您收到了这种由Binhex所编码的mail,而且您的mail软体并不是Eudora 或其他有支援Binhex格式的软体,那怎麽办呢?别急,我们这儿也介绍一个 解读Binhex的程式给您!
这也是一个shareware,您可以在一些ftp server找到的,档名是 binhex13.exe,它是一个在DOS之下执行的程式。同样地,先把您收到的「天 书」存档,然後在DOS下执行这个binhex13.exe。执行後它会出现一个简易视 窗,萤幕最下方则是功能表。我们可以看到其F1是help、F2是「Bin2Hex」, 也就是把binary档案转换成Binhex码;而F3是「Hex2Bin」,也就是把Binhex 码还原成binary档案。因此您可以按下键盘上的功能键F3,然後它会出现一 个小对话视窗,让您选择您要解码的档案,这时选取刚刚您把mail存下来的 档案,按下enter键,您会看到萤幕上出现「filename successfulely converted」,它已经帮您把档案解码还原啦!
在windows之下,您还可以用我们前面所介绍的wincode来解码,看到这儿, 您是不是要赞叹wincode的功能真是强大,本文介绍的UU编码、MIME、Binhex 居然都可以用它来处理!是的,它是一个不错的编码、解码软体,可处理多种 格式之编码方式。稍微可惜的是对於MIME,它只处理base64之编码,如果能 再加上QP的功能,您真的可以靠它走遍天下了!
■ 结语
经由本文的介绍说明,相信各位读者已对於各种编码方式具相当的了解,您 是否觉得它其实一点也不困难呢?虽然好像有点复杂,但其实在MIME几乎已 成标准规格的现在,用一套支援MIME的软体来做收发E-mail的工作,这些编 码、解码是不劳您去伤脑筋的。不要觉得很麻烦,想想看如果您有位远方的朋 友过生日,您亲自用绘图软体画了一张精美贺卡,还用音效程式录下您美妙的 歌声唱着生日快乐歌,然後用E-mail在一瞬间传送到他那儿,是多麽温馨感 人呀!如果您正是那位令人 慕的寿星,偏偏您又没有适当的mail软体来收 取这份祝福,那怎麽办呢?相信阅读本文後,必定不再让您感到遗憾,任何的 祝福您都不会错过。
-- ※ 来源:.广州网易 BBS bbs.nease.net.[FROM: 202.103.139.44]
|
|