邮件乱码破解完全手册
当前位置:点晴教程→知识管理交流
→『 技术文档交流 』
随着Internet的普及,在网上通过E-mail传递信息逐渐成为现代人生活的时尚,相信不久甚至还会成为一种生活的必需内容。但我们在接收电子邮件的时候,不时会发现接收的邮件是些怪模怪样的乱码,根本无法阅读。如果这些邮件的内容并不很重要,可能还不会有太大影响,可是假如是些紧急事件的通知或是生意场上的公函,则很可能就会给你带来不小的损失。遇到这种情况,你打算怎么办呢?把邮件丢进垃圾筒就当没收到,麻烦发信人再重发一次,还是自己找方法破译? 我们知道,计算机以及很多计算机网络协议的制定都是建立在ASCII码(美国国家标准信息交换码,它是一种最基本的字符表示方法)基础上的,但是随着信息内容的日益丰富,用ASCII码表示计算机信息开始暴露出很大的不足,这主要表现在表示多国文字、图形、声音等二进制文件和信息压缩、信息保密等诸多方面。因此,在ASCII码和扩展ASCII码的基础上,用一定的规则定义一些新的信息表达形式就形成了信息传输和处理中的另一类概念和事物,这就是“编码”和“解码”。当信息编码和解码能够统一的时候,信息无疑是可以交换和被理解的;反之,当信息编码和解码不能够得到统一的时候,信息就无法被用于交换和理解,于是就产生了所谓的“乱码”。 既然乱码的产生是由于信息编码和解码不能够得到统一,那么解决乱码的过程自然就是找到和编码相统一的解码方法,并对计算机软件不能全自动进行正确解码的信息进行重新处理和解码,最终使得所恢复的信息能被人们理解和交换,这就是所谓的“破解”。 可以说,常见的乱码都有这样一些共性:(1)和汉字或其他语种的文字有关;(2)最常发生在电子邮件的传输和阅读中;(3)和传送二进制文件有关;(4)和信息加密解密、编码解码有关。而我们今天要讨论的电子邮件乱码的原因也正如前面所说,和相应的邮件发送系统、电子邮件软件以及操作系统平台本身,即它们用来自动识别和编码解码的协议规则,有着极为密切的关系。 本文以目前最常使用的电子邮件软件Outlook Express和Foxmail为例(其它电子邮件软件有所提及),尽可能给出常见乱码的乱码原因、乱码现象、标志格式和解决方案,并为你提供一套经典的破解流程作为参考,只是希望对你破解邮件乱码DIY能有些许帮助。 一、乱码产生之来龙去脉篇 (一)邮件乱码产生的原因 事实上造成邮件乱码的具体原因是很多的,但最为常见的不外乎有三种情况: 1.传输机制不同 由于Internet上的某些邮件服务器(国外居多)不支持8位(非标准ASCII码格式)的中文邮件传输,所以在它们之间传输邮件就会产生乱码。具体来讲,这是因为Internet邮件协议是在1982年定义的,当时的邮件基本上只由英语文本组成,而没有其它文件格式,因此当时定义的邮件协议普遍只支持简单的ASCII码文本(对DOS、Windows及Unix操作系统来说,所有英文字母及符号都是用ASCII码来表示的,而ASCII码只用到每个字节8位中的前7位)。这样,为了支持国际上流行的邮件协议,Internet上不少邮件系统相应只支持7位的ASCII码字符传输方式在当时看来也就顺理成章。但非常不巧的是,由于汉字的内码是8位的(一个汉字是用两个扩展ASCII码表示的),所以当在电子邮件系统之间传送中文信息时,如果没有经过那些只支持7位的邮件系统(比如在国内的邮件系统间传输),自然可以正确的识别中文;但如果恰好经过了那些只支持7位字符的邮件系统(即使只有一台这样不支持8位传输条件的主机,中文邮件都可能被破坏),它们会硬把8位数据当作7位来处理,将汉字内码第8位的1全部变为0,这当然就使邮件内容立刻变得面目全非起来。 除了中文双字节邮件外,如果通过E-mail传送一些非ASCII码格式的文件(如.jpg、.exe、.zip)也会由于主机无法处理,而把信件中的每个字符的第8位都滤掉(即截去第8位),从而使信息和原始信息截然不同,造成邮件的完全损坏。这样的乱码当然就无法阅读了。由于传输机制不同造成邮件乱码的现象是邮件乱码产生的主要原因之一。 2.邮件编码不同 为了解决传输机制不同造成的邮件乱码,现在国际上普遍在电子邮件中采用各种邮件编码方式,即将8位的文件格式预先按照一定的规则进行编码,以使它可以完好地通过只支持7位字符的邮件传输系统。通过对邮件进行7位编码再进行传输和解码可以一定程度的解决截位乱码的现象。 为了能既克服传输机制不同造成的中文或非ASCII码格式传输错误,又不违背当初的协议标准,现在普遍采用的编码方法是在邮件信息中转换要传递的二进制数据。我们把二进制数据转换为文本数据称作编码(encode),反之则称为解码(decode)。但问题是由于目前的编码标准有很多,如UU、MIME、BINHEX编码等等,如果收发双方都使用同一种编码/解码方式,那邮件传送自然不会有任何的问题,然而,如果发送方采用一种方式,而接受方不能正确的识别出这种编码方法,无疑就会出现乱码。此外,有的邮件在传输过程中还可能被邮件系统进行过特别的处理,当然也可能对数据进行了某种特别的编码,但我们在接收的时候怎么能自动的知道它到底经过了哪些处理呢?这样的话,由于邮件编码不同造成乱码现象看来也就不足为奇了。 需要说明的是,由于在我国大陆地区,国标码GB2312码是通用的的简体中文内码,所以国内通行的绝大多数邮件系统都能够完全支持GB(国标码)内码的邮件,故而在国内邮件系统内传输电子邮件可以直接传送而不需要再进行任何编码。 3.电子邮件软件或操作系统不同 一般情况下,各种电子邮件软件的默认设置是不相同的,除此之外,收件人和发件人在电子邮件软件的自定义中的设定肯定也不尽相同,这无形中就为邮件乱码的产生创造了条件。如果发送方用某种编码方式发送了邮件,而接收方所持有的电子邮件软件对编码的设置与邮件编码不同,这样极有可能发生的情况是:电子邮件软件在收到编码过的信件后不能“自动”识别其编码方式,从而造成在查看信件的内容时出现所谓的乱码,我们自然无法阅读。此外,假如接收方所持有的电子邮件软件没有对应的解码功能,或者收发双方用的是两种支持不同编码的邮件软件,也同样可能造成无法正常阅读的错误。还有一种情况是,发送方从其他系统中转发了编码过的邮件内容给接收方,但接收的电子邮件软件只能将原编码过的内容原封不动的显示出来,而不能继续将这种“乱码”再进一步的智能转换为我们能阅读的文字。 与电子邮件软件的影响相似,由于各个国家、各个地区可能使用不同的操作系统(包括同一种操作系统的高低级版本、中英文版本),往往会在阅读邮件(还有网页)时看到所谓的“乱码”。如对于不同的汉字编码,中国大陆用GB码、中国台湾用Big5码和HZ码、港澳特区有用GB码,也有用Big5码的,由于操作系统汉字内码的差异,在收发邮件时遭遇到乱码也就不算奇怪了。 (二)E-mail中常见的编码标准 如上面我们所谈到的那样,现在传送电子邮件的关键在于编码。只有经过编码,中文或非ASCII码格式的邮件才能正确通过Internet上那些不支持8位编码的邮件系统;只有电子邮件软件都完全支持,而且能正确识别编码的类别,电子邮件的内容才能为我们所阅读和理解。那么,在电子邮件系统中究竟有哪些编码标准呢?目前在E-mail中一般常用的编码标准有UU、MIME和BINHEX编码三种,其中MIME编码是目前应用最广泛的编码。下面我们就来详细了解一下这几种编码: 1.UU编码(Unix-to-Unix encoding) 这是邮件传输早期传送非ASCII码文件时最常使用的编码方式,它主要使用在Unix环境下(邮件系统大多都建立在Unix操作系统上),但目前使用者已经越来越少。UU编码实际上由Uuencode和Uudecode两部分组成,它们分别是Unix系统下的UU编码和解码程序,但其内部所用算法却是MIME编码中Base64编码的算法,后来被改写成为在DOS下运行的可执行程序。 : |8 I& _, e1 f) SUU编码传输邮件的原理是:在进行邮件发送前,先在DOS方式下用Uuencode.exe程序将原文件编码成ASCII码文件,然后再进行发送,而收件人在接到文件后只需用Uudecode.exe程序将文件还原即可。此外,UU编码并非只能对中文邮件进行编码,只要你寄出的文件包括.gif、.jpg、.exe、.zip等二进制文件,它都能按照编码、发送、收信、解码还原的步骤来予以传送。这种编码方法现在虽已经不很常用了,但Outlook Express、Foxmail等绝大多数电子邮件软件都支持它。 需要指出的是,UU编码是DOS系统下的编解码程序,在Windows系统中与之对应的编解码程序是Wincode(Winzip也采用了相似的原理)。事实上,Wincode的使用原理同DOS下的Uuencode和Uudecode相同,只不过它是利用了Windows的界面,从而使相应的操作方式更为简便和灵活。值得注意的是,Wincode程序除了支持UU编码外,还支持MIME、BINHEX等多种编码格式,故而应用范围相当广泛。 2.MIME编码(Multipurpose Internet Mail Extentions) 虽然UU编码也能解决E-mail传送中文或非ASCII码文件的问题,但它的编解码方式在现在看来非常不方便,这就促使了MIME编码标准的产生。Mimencode最早被称为Mmencode,之所以提出用Mimencode代替Uuencode,是因为Uuencode编码使用的一些字符在一些邮件网关(特别是那些转换ASCII码和EBCDIC码的网关)中会造成传输障碍。另外,还有一些电子邮件软件不能对所有Uuencode码的算法进行正确解码而导致邮件的阅读困难,因此MIME编码就被设计用来替代Uuencode编码,但历史的结果是这些编码协议得到了共存。 MIME编码一般被译作“多媒体邮件传送模式”,它是可以传送多媒体文件,并在一封电子邮件中附加各种格式文件一起发送的编码标准。我们现在最常使用的电子邮件软件Outlook Express、Eudora、Foxmail和一些网上在线邮局如163、263等都是采用MIME编码方式的,所以我们得以非常轻松的收发电子邮件。 由于MIME定义的是一种编码规格,或者可以说只是一类编码的统称,所以能够符合MIME标准的编码方式并非只有一种。事实上只要符合MIME规格的编码方式都能顺利的传送邮件。目前在MIME编码标准下公认的两种编码方式分别是Base64编码和QP(Quote-Printable)编码。另外,Internet上还有几种种编码是HZ编码、UTF-7编码和UTF-8编码。 (1)Base64编码 Base64的编码规则是将整个文件重新编码成7位以适用于传送二进制文件。具体来说是将字符流顺序放入一个24位的缓冲区(缺字符的地方就补零),然后再将缓冲区截断成为4个部分(高位在前),每个部分6位,并用下面的64个字符重新表示:“ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/”。如果输入只有一个或两个字节,那么输出将用等号“=”补足,这样的编码方式可以有效隔断附加信息对编码造成的混乱。这就是Base64编码。 (2)QP(Quote-Printable)编码 QP编码的规则是,对于资料中的7位字符不作重新编码,而是仅将8位的数据转成7位即可。我们可以看到,QP编码是字符对应的编码,每个未编码的二进制字符都会被编码成3个字符,即一个等号加上两个该字符的16进制值,如“=A8”,但这样的编码数为1:3,所以编码效率相对于其它编码方式而言相当低。但不可否认的是,这种编码方法非常简单,特别适合那些数据大多数是7位的ASCII码文本、偶尔插入8位字母的情况,但遗憾的是对汉字编码效果不够好,因为每个双字节汉字经过编码后会变成6个字节。 (3)HZ编码 HZ编码也是一种Internet上常见的编码方式,它的编码规则是只对高位为1的字符(如汉字的双字节内码)进行编码。具体方法是将最高位屏蔽,只保留低7位,并将经过变换后的字符部分用符号~{和~}括起来,当解码的时候只需将括号对里面的那部分高位重置为1就可以正确的加以还原了。 需要特别指出的是,MIME编码标准如今已成为Internet电子邮件的主流编码标准。它的好处显而易见:我们可以物件作为包装方式,然后将多种不同文件一起打包后传送。发信人只要将欲发送的文件选定好,MIME编码就会在传送时即时编码,待收信人收取邮件后同样也能即时解码还原这些文件。可以看得出来,这种全部由电子邮件软件自动完成的传送方式较UU编码方式来说,实在是方便不少。当然,这种邮件传送方式成功的先决条件是双方的邮件软件都必须支持MIME编码功能,要不然发信人很方便的把信送出去了,但收信人的软件却没有这种功能而无法把它还原,他看到的自然就是一大堆乱码了。要知道,使用这种方式用户根本不需要知道它是如何进行编码解码的,不管是用中文写信,还是寄多媒体文件,只要选好文件,选完后寄出,其余的工作可全部由电子邮件软件自动完成。 由于MIME编码的这种便利性、可靠性,现在越来越多的电子邮件(几乎所有)都采用了这种编码方式,像我们国内用户最常使用的电子邮件软件Outlook Express、FoxMail、Eudora、The Bat!、Netscape Mail和Internet Mail等都支持MIME编码标准。一般来说,MIME编码中具体方式的选择也会影响编码之后邮件文件的大小,但具有MIME编码功能的E-mail软件大都能自动判别发送过来的邮件是采用何种MIME编码,然后自动选择是用Base64还是用QP来解码。当然,即使是正确的MIME编码也可能因为邮件文本格式的不规范而不能得以正确解码,这个时候,我们从E-mail软件或Hotmail里面得到的Base64编码或QP编码就可能成为乱码,这也是MIME编码产生乱码的主要原因之一。 3.BINHEX编码 由于BINHEX的编码方式主要用于Mac机,PC机上很少使用,所以一般PC机上的电子邮件软件多数支持MIME编码标准而很少支持BINHEX格式的。在我们常用的电子邮件软件中,只有Eudora具有这种功能可直接解读BINHEX编码。 4.其它编码 这类编码主要指日文Shift-JIS、日文Shift-EUC、韩文KSC、繁体中文Big5等语言内码,本文主要针对繁体中文Big5码而言。我们知道,由于它们是不同语言环境下的不同语言内码,在通过电子邮件传递的过程中就难免不出现乱码,因此这里将它们归为email中一类比较特别的编码。 特别提示:对于上面提到的四类编码,最新的Foxmail 3.1版支持Uuencode和MIME两种编码,但MIME编码只支持8位(8bit)编码方式(也有称作UTF-8编码的),另外它还支持us-ascii、ISO-8859-1、简体中文GB2312、日文Shift-JIS、韩文KSC、繁体中文Big5等多种字符集。总的来说,它比较适合以纯文本方式传送正文。而Outlook Express 5则支持Uuencode编码和MIME中的Base64以及QP两种编码方式以及UTF-7、UTF-8编码和多国文字字符集,除此之外它还支持邮件正文以HTML方式传送,这就是我们用Outlook Express能看到有着漂亮背景的邮件的原因。另外,我们上面提到的Windows下的Wincode解码程序也能支持Uuencode编码、MIME编码以及Binhex编码,但非常遗憾的是,对于MIME编码,Wincode只能处理Base64的编码,而没有QP编码的功能,实在是有些美中不足。 二、乱码现形之真相大白篇 在以下内容中,我们将下面这段话作为所有乱码对应的简体中文,并存为lm.txt文本,用来分析下面九类乱码的特征与形式: 在人类历史上,从来没有一项技术及其应用像互联网一样发展那么快,对人们的工作、生活、消费和交往方式影响那么大,并且,随着高度信息化的网络社会的到来,人们在生产和生活方式、观念和意识等方面也必然会发生巨大的变化。 1.Uuencode“乱码” 由于Uuencode编码的内部所用算法是Base64编码的算法,所以它的格式与Base64编码格式非常相似,差别仅仅在于“信头”部分不同。 Uuencode“乱码”的大体格式为: begin 666 lm.txt 2NLV]N\WYM[W*O=.PS^S$Q\.T` end 我们可以看到Uuencode“乱码”的主要特征是:编码以“begin xxx”开头,后面紧接着编码之前原始文件的名称,接着是已经用Uuencode编码的邮件内容,在乱码内容的后面,即最后一行为“end”。此外,乱码内容基本上除了最后两行外每行都是以英文字母“M”开头。上面那段话中,“begin”至“end”之间的内容即为“在人类历史上,从来没有一项技术及...”这段话的Uuedncode编码。 如果我们所用的电子邮件软件不支持Uuencode解码,那么我们看到的就是这些Uuencode“乱码”。 2.Base64 encode“乱码” Base64是MIME标准编码之一,它的编码方式是将4个字节(8位)用3个字节(6位)表示,由于编码后的内容是6位的,因此可以避免第8位被截掉。一般以附件发出的各种文件都会使用这种编码,其内容往往是一大堆杂乱无章但都可以正常显示的ASCII码字符(其大小被限定在0-63之间, 分别用'A'-'Z'、'a'-'z'、'0'-'9'、'+'和'/'组成),同时邮件头上有“Content-Transfer-Encoding: base64”字样。 Base64 encode“乱码”的大体格式为: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: base64 ICAgINTayMvA4MD6yrfJz6OstNPAtMO709DSu8/uvLzK9bywxuTTptPDz/G7 pcGqzfjSu9H5t6LVucTHw7S/7KOsttTIy8PHtcS5pNf3oaLJ+rvuoaLP+7fR us29u835t73KvdOwz+zEx8O0 我们可以看到Base64 encode的标志头中影响编码的主要有三行(分号后的内容算上一行):第一行表明是MIME编码;第二行是Content-Type(内容及类型),它说明邮件的内容类型是纯文本、图片还是压缩文件或是超文本文档(如text/plain表示普通文本文件、text/html表示超文本文件、application/x-zip-compressed表示zip压缩文件),至于charset(字符集)则是用来说明信中文字所用字符集的(通常有us-ascii、ISO-8859-1、GB2312等);第三行为Content-Transfer-Encoding(内容传输编码方式),表示编码方式(如base64、qutoed Printable或7bit);有的邮件最后一行还有Content-Disposition字样,它表示编码文件的位置。对应乱码的内容即是“在人类历史上,从来没有一项技术及...”这段话的Base64编码。 如果我们所用的电子邮件软件不支持Base64解码,那么我们看到的就是这些Base64 encode“乱码”。 3.QP encode“乱码” QP encode也是MIME标准编码之一,这种编码的全名之所以叫作“Quoted-Printable Content-Transfer-Encoding”,是因为用这种格式表示的信息其内容主要都是ASCII码字符集中可以打印的字符,因此名称中含有printable。QP编码的方式是将一个字节用两个16进制数值表示,然后在前面加“=”。 QP encode“乱码”的大体格式为: Mime-Version: 1.0 Content-Type: text/plain; charset="gb2312" Content-Transfer-Encoding: quoted-printable =D4=DA=C8=CB=C0=E0=C0=FA=CA=B7=C9=CF=A3=AC=B4=D3=C0=B4=C3=BB=D3=D0=D2=BB=CF=EE=BC=BC=CA=F5=BC=B0=C6=E4=D3=A6=D3=C3=CF=F1=BB=A5=C1=AA=CD=F8=D2=BB=D1=F9=B7=A2=D5=B9=C4=C7=C3=B4=BF=EC=A3=AC=B6=D4=C8=CB=C3=C7=B5=C4=B9=A4=D7=F7=A1=A2=C9=FA=BB=EE=A1=A2=CF=FB=B7=D1=BA=CD=BD=BB=CD=F9=B7=BD=CA=BD=D3=B0=CF=EC=C4=C7=C3=B4 我们可以看到,QP encode编码将一个8位的字符表示为3个字符:一个“=”和两个16进制数。由于汉字编码一般以两个8位表示一个汉字,所以该编码中表示一个汉字需要6个字符,如此段中的“=C8=CB”表示“人”字,“=C0=E0”表示“类”字。采用QP编码方式的邮件很容易进行判别,因为它的内容通常含有很多等号“=”,即使不看“信头”我们也能非常容易的判断它是否为QP encode编码。在实际使用中,这种编码还有一种变形,即用“%”号代替“=”号。 如果我们的电子邮件软件不支持QP encode解码,那么我们看到的就是这些QP encode“乱码”。 4.UTF-7“乱码” UTF-7“乱码”的大体格式为: Mime-Version: 1.0 Content-Type: text/plain; charset="utf-7" Content-Transfer-Encoding: 7bit +VyhOunx7U4ZT8k4K/wxOzmdlbKFnCU4AmHligGcvU8pRdl6UdShQz06SgFR/UU4AaDdT0VxVkKNOSF/r/wxb+U66Tux2hF3lT1wwAXUfbTswAW2IjTlUjE6kX4BluV8PX3FUzZCjTkhZJ/8MXnZOFP8Mlo93QJrYXqZP4WBvUxZ2hH9Rftx5Pk8adoRSMGdl/wxOuk7sVyh1H06nVIx1H207ZblfDzABicJf9VSMYQ+LxntJZbmXYk5fX8VxNk8aU9F1H13oWSd2hFPYUxYwAgA8- 我们可以看到这种乱码除了具有QP乱码的特征外,在开头和结尾分别有“+”和“-”符号。其信头下的内容即为“在人类历史上,从来没有一项技术及...”这段话的UTF-7编码。 5.UTF-8“乱码” UTF-8“乱码”的大体格式为: Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 8bit 鍦ㄤ汉绫诲巻鍙蹭笂锛屼粠鏉ユ病鏈変竴椤规妧鏈強鍏跺簲鐢ㄥ儚浜掕仈缃戜竴鏍峰彂灞曢偅涔堝揩锛屽浜轰滑鐨勫伐浣溿 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 8bit 保存为.eml的文本文件后用OutLook Express解码查看,同样需要单击菜单栏“查看”/“编码”/“Unicode(UTF-8)”。 方法3:将UTF-8“乱码”邮件存为一个.txt的文本文件,并改文件名后缀为.uue,然后使用Winzip来解码。如果不行,还可在这个文本文件的邮件信头处添加如下几行: Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 8bit 要注意信头中间不要空行,信头和信体之间要留有一个空行(即在“Content-Transfer-Encoding: 8bit”下要留有一行空行)。这样形成的文件名后缀依然要改为.uue,然后用Winzip打开,信体一般就会被正确解码。 6.解决HZ“乱码”的方法 方法1:将HZ“乱码”邮件转寄到自己的一个邮箱中,然后在OutLook Express中单击菜单栏“查看”/“编码”/“简体中文(HZ)”,即可看到解码后的内容。 方法2:将HZ“乱码”邮件存为一个.txt的文本文件,将文件名后缀改为.eml,由OutLook Express打开,并单击菜单栏“查看”/“编码”/“简体中文(HZ)”即可看到解码的内容。如果邮件使用的是附件方式,则可将附件保存后再用OutLook Express打开查看。必要时也可以剪贴下来,再加上如下信头: Mime-Version: 1.0 Content-Type: text/plain; charset="hz-gb-2312" Content-Transfer-Encoding: quoted-printable 保存为.eml的文本文件后用OutLook Express解码查看。 方法3:将HZ“乱码”邮件存为一个.txt的文本文件,并改文件名后缀为.uue,然后使用Winzip来解码。如果不行,还可在这个文本文件的邮件信头处添加如下几行: Mime-Version: 1.0 Content-Type: text/plain; charset="hz-gb-2312" Content-Transfer-Encoding: quoted-printable 特别要注意的是信头中间不要空行,信头和信体之间却要留有一个空行(即在“Content-Transfer-Encoding: quoted-printable ”下要留有一行空行)。这样形成的文件名后缀依然要改为.uue,然后用Winzip打开,信体一般就会被正确解码。 特别提示:通过对上面六类乱码的解决,我们能够看出对于UU编码和MIME类的乱码,一般可以有三种方法解决,第一种是通过转寄乱码邮件(有的情况下可以不用转寄)后用支持该编码的电子邮件软件来接收、查看;第二种是将乱码邮件存为以.eml为后缀名的文本文件,然后用OutLook Express解码查看;第三种则是将乱码邮件存为以.uue为后缀名的文本文件,然后用Winzip解码查看,如果这两种方式没有能够直接解码成功,则一般可以通过添加信头来解决。对于各种不同类型的乱码,它们要添加的信头仅仅在于字符集charset和内容传输编码方式Content-Transfer-Encoding有区别。另外,对于Uuencode编码和Base64乱码,还有第四种方法,就是用Windows下的Wincode程序来解码阅读。 #1 7.解决半个汉字“乱码”的方法 对于半个汉字乱码,只要将“乱码”邮件存为一个.txt文本文件,然后使用以字符为单位的编辑软件,将“乱码”行的首字符删除,后面的部分就会和相邻的“乱码”重新组合成可识别的汉字。这样虽然会丢失前面一个(或几个)汉字,但能挽救、还原大部分汉字,有时候就足够猜测出邮件的原意了。 #1 8.解决Big5码和其它(如其它语言内码)“乱码”的方法 对于这些乱码邮件,除了可以在Outlook Express中单击菜单栏“查看”/“编码”选项,并选中“简体中文(GB2312)”编码方式查看外,还可以用一些支持多种编码的中文系统,如中文之星、Richwin、南极星等转换平台,并在其中选择GB2312码,一般就可以正常显示邮件为简体中文了。 #1 9.解决BINHEX“乱码”的方法 这里还想对BINHEX“乱码”作一不完全的解法介绍,虽然它极为少见,但如果你不幸碰上,还是可以用下面的方法试一试: 方法1:对于由BINHEX编码产生的乱码邮件,用Eudora来查看它。 方法2:用一个专门解读BINHEX编码的程序Binhex3.exe(共享软件,在许多FTP站点都能找到)来打开阅读。 方法3:将Base64 encode“乱码”邮件存为一个.txt的文本文件,然后在Windows下用Wincode程序解码。 #1 四、乱码转换之简单装备篇 #1 1.乱码察看器(CodeView) 版本:2.50 软件大小:293KB 发布日期:2000/8 软件类型:免费软件 使用平台:Windows95/98/ME/NT/2000 下载地点:http://topsoft.163.com/software/download.php?id=3597 功能等级:★★★★ 乱码察看器,顾名思义就是用来察看各种乱码的一个小工具软件。它目前支持Uuencode编码、Base64编码、Quoted-Printable编码和HZ编码四种单一形式的编码和解码以及Base64、Quoted-Printable和HZ编码三种的混合形式的乱码察看。除此之外,还提供了对Big5码的支持,可以在Big5码和GB码之间自由转换(也可以让程序自动识别并将Big5码转换成GB码),所以应该算是同类软件中功能较为齐全的软件了(特别是可以在Win2000下使用)。 乱码察看器的界面不算很漂亮(如^53200027a^1),但操作起来很简单,一般有两种使用方法:一种是在有乱码的窗口中直接按下单键解码热键(默认为F7),此时如果窗口中的乱码能被识别,就会出现一个窗口覆盖掉当前的乱码窗口,我们可以直接在这个窗口中阅解码后的内容。作者建议你在大多数情况下都使用这种方式;第二种方法是将乱码内容通过剪贴板复制到乱码察看器的源窗口中,然后手工尝试用不同的解码方式进行解码,可以看到这种解码方法将提供给你更多的选择自由,并且可以使用一些在单键解码中无法实现的解码方式,如通过“其他方式解码”解决由于字节高位被屏蔽而形成的死乱码和通过“UUCode”解开Uuencode解码等。对于一些单键解码无法解决的乱码问题我们不妨使用此方式试试。 乱码察看器还有一个特色是提供了“剪贴板实时监视”、“混合乱码识别”和“智能弹出”功能(智能弹出功能采用混合编码的识别方法)。但是由于乱码的多样性,它识别混合编码的成功率并不是很高,甚至经常会出现一些原本正常的内容被识别错误的情况,这时你不妨将单一的乱码复制到剪贴板里(只复制乱码部分,而不要包含正常的文字),或者采用在乱码察看器中手动解码的方法来试试。另外,如果一些正常文本复制到剪贴板后,乱码察看器也会将它误识为乱码而自动弹出,这时建议你将其设置为“不要自动弹出”,可以避免一些不必要的麻烦。 总的说来,这款小软件对于解决常见的乱码还是比较有效的,特别是对于那些电脑初学者来说相当容易和轻松,可以省去不少的麻烦。它是绿色软件,无需安装,只要任意将其解压到一个目录中即可运行。 #1 2.邮件解码器(Mail Decoder) 版本:1.0 软件大小:686KB 发布日期:2000/6 软件类型:免费软件 使用平台:Windows95/98/ME/NT/2000 下载地点:http://netsurfe.e-lists.com.cn/download/decoder.exe 功能等级:★★★★☆ 邮件解码器也是一个类似于乱码察看器的小软件,但它能支持更多的编码格式,因此解乱码的成功率更高。它目前支持Base64编码、Quoted-Printable编码、HZ编码、UTF-7编码(->GB码、->Big5码)、UTF-8编码(->GB码、->Big5码),此外还支持GB码与 Big5码的相互转换。最难得的是此软件还提供了一个非常实用的功能——“7位-8位”,它使你能手动解除因部分邮件服务器不支持8位码而造成的邮件信息丢失的编码。 邮件解码器这个软件也不以界面见长,一眼看上去普普通通(如^53200027b^2),但使用起来一样非常简单。该解码器的内部提供了中文GB、BIG5和英文三种界面,如果你发现你的邮件解码器不是中文的,你可以单击菜单栏上左起第五个菜单(英文是Configuration),选中其中唯一的选项,在跳出的窗口中选择“中文界面(GB)”(如^53200027c^3),确定即可变为中文。在使用时,一般来说,你可以直接将邮件乱码文本拷贝到源文本框中,然后单击“解码”,找到对应的编码单击即可解码,此时你就可以直接在目标文本框中看到邮件的庐山真面目了。另外,解码的第二种方法允许你通过单击“文件”/“打开”调出你保存下来的乱码邮件文本在邮件解码器左栏中,然后同样单击“解码”在右栏中显示邮件。 除了上面所介绍的功能之外,你在邮件解码器中还可以单击“文件”/“解码文件按”,将你的邮件乱码文件保存为经某种编码解码后的文本文件;可以单击“文件”/“汉字内码转换器”,在GB码与Big5码之间任意相互转换(即使保存编码后的文件也行)。至于这个软件附加的其它一些功能,如提供邮件的删除、添加标志字符,换行等,操作起来也很简单,基本上没有什么难度。 总的来说,邮件解码器是个相当实用的解除邮件乱码的小工具,不仅操作简单,而且功能强大,能使大多数出现的乱码邮件恢复本来面目。 #1 3.Zeal Decoder 版本:1.0 软件大小:8K 发布日期:1998/8 软件类型:免费软件 使用平台:DOS/Windows9X 下载地点:http://www.nease.net/~zealsoft/zdecoder.zip 功能等级:★★★ 与前面介绍的两个软件不同,Zeal Decoder这个程序不是为解除大多数邮件乱码而设计的,而是专门针对一种编码设计的,目前它只处理Quoted-Printable编码的乱码邮件。 这个小软件个头奇小,加上说明文档还只有8K,显然不是windows下的程序。事实上它是一个DOS程序,但能在Windows下运行。其使用方法是在DOS窗口中输入命令,但不需要邮件信头就可以解码。它的命令行语法是这样的: zdecode <infile> <outfile> [leading character]
如zdecode lm.txt lm.txt = 其中,infile表示输入文件名,outfile表示输出文件,leading character表示引导字符,它是可选项,绝大多数QP编码的乱码邮件都可以使用“=”等号作为引导字符(这是默认设置)。 如果某些QP编码的乱码邮件使用的引导字符不是“=”,而是“%”,则可以相应改变。 #1 4.Hzdecoder 版本:1.4 软件大小:171K 发布日期:2000/8 软件类型:免费软件 使用平台:Windows95/98/ME 下载地点:http://www4.netease.com/~lianghe/hzdecode.zip 功能等级:★★★ 这个小软件也是一个功能单一的邮件解码软件,它只能针对HZ编码的乱码邮件解码。如果你经常收到一些HZ编码的邮件(特别是在一些基于WEB方式的信箱中经常会出现这种乱码),则不妨试试它。 对于这个小软件的使用,也是非常简单,你只需将乱码的邮件粘贴到这个程序的编辑区它就可以自动显示出正常的中文来。除了解码外,Hzdecoder还能进行一些编码,如Quoted-Printable编码、Big5->GB码、GB码->Big5码等。 #1 五、乱码破解之流程篇 当你收到一封乱码邮件时,第一步必须要做的是根据乱码的特征判断它到底属于哪种编码,如果能判断出是哪种编码,最简单的方法当然是将乱码邮件剪贴下来,利用现成的乱码邮件解码软件(如乱码察看器或邮件解码器)来解码阅读或利用中文之星、Richwin、南极星这样的中文平台转换内码。但如果根据邮件的内容你一时判别不出是哪种编码,或者你没有任何现成的解码工具软件,则你可以如此一步一步的做下去(以Outlook Express 5为例): 步骤1:更改OE5设置。 启动Outlook Express,单击“工具”/“选项”命令,在出现的对话窗中单击“阅读”标签,再单击“字体”按钮,选择“简体中文(GB2312)”。并接下来将它设置为默认值,单击“国际设置”按钮,选中“为接收的所有的邮件使用默认的编码”,确定后退出。如此设置后,当你再打开邮件阅读时,通常就不会再出现乱码了。 步骤2:编码选项查看。 如果第一步没能奏效,你可以在Outlook Express中选定乱码邮件,然后单击“查看”/“编码”/“简体中文(GB2312)”或“其他”/“简体中文(HZ)”,看看邮件内容是不是能破解。 步骤3:转寄邮件后再收。 在第二步还不能奏效的情况下你可以将此邮件转寄到你的另一个邮箱中,然后再用Outlook Express接收,有时即可顺利解码。当然,也可以试着用不同的电子邮件软件接收此邮件,看看是否能消除乱码现象,因为不同的电子邮件软件对编码的兼容能力还是有所不同的。 步骤4:改名为.eml后重解。 如果仍然显示为乱码,你可以将乱码邮件存为一个.txt的文本文件(如果是通过WEB页收取的邮件,就将信体剪贴下来存为一个.txt的文本文件),并改其后缀名为.eml,由Outlook Express来打开,这样一般就可以自动解码了。 步骤5:添加信头后重读。 如果还不行,你可以接着在上面那个.eml文件的最前面添加如下信头: Mime-Version: 1.0 Content-Type: text/plain; charset="gb2312" Content-Transfer-Encoding: base64 特别要注意的是信头中间不要空行,信头和信体之间却要留有一个空行(即在“Content-Transfer-Encoding: base64”下要留有一行空行)。另外,如果不是Base64乱码,你需要判别它们是不是QP乱码或UTF-7、UTF-8乱码或HZ乱码,并分别将base64替换成quoted-printable、7bit、7bit、quoted-printable(后三种乱码还要将gb2312替换成utf-7、utf-8或hz-gb-2312)。完成保存后一般就可以用OutLook Express解码查看了。 步骤6:利用Winzip解码。 如问题仍得不到解决,可以将乱码邮件存为一个.txt的文本文件,并改其后缀名为.uue,然后调用WinZip来对乱码邮件进行解码。 步骤7:添加信头再用Winzip解码。 倘若解码无效,可以像在.eml文件中添加信头那样在.uue文件中添加信头,然后再用Winzip解码,相信绝大多数邮件乱码到这一步就会露出其“庐山真面目”了。 步骤8:字符重组。 对于利用上面步骤还不能正确解码的乱码邮件,你可以将其存为一个.txt文本文件,然后使用任意以字符为单位的编辑软件,将乱码行的第一个字符删除。看看后面的部分能不能和它相邻的乱码重新组成可识别的汉字。 步骤9:利用Wincode解码。 如果到这里都不能搞定乱码邮件,你只有借助Wincode了。将乱码邮件存为一个.txt的文本文件,然后在Windows下调用Wincode程序解码(Wincode程序支持UU编码、Base64编码和BINHEX等编码格式)。 步骤10:调用内码转换平台。 本来这个步骤应该早早在你判断出编码类型后就决定做不做的,但如果开始你判断失误,那么现在不妨回过头来全面的做一遍。调出你所有的平台转换工具,尝试尽可能全面的内码转换,看看能不能“死马当活马医”! 如果以上步骤均不能奏效,则可以判断收到的乱码邮件是未经过编码而造成第8位字节被滤掉的乱码邮件,一般来说,这只能通过编程来解决,但邮件解码器(Mail Decoder)这个软件中提供了“7位-8位”这个功能,所以如果你不擅长编程就只好求助于它了。另外,可以再提醒你的是,在Outlook Express 5中,你可以在选中乱码邮件后单击右键,在出现的快捷菜单中选择“属性”项,并在出现的对话框中单击“详细资料”标签,然后再单击右下方的“邮件的源文件(M)”,此时你就会看到邮件乱码的源文件。有时源文件就能显示出你想要得到的所有信息,即使没有的话,也能方便你将其存为.txt文本文件呀! 特别提示:邮件乱码破解的一个关键点是判别乱码的编码类型,因为不同编码的乱码,在不同的平台上有不同的解决方法,因此解码前如果能查看到乱码邮件的内容(可以利用源文件),再根据其特征对邮件可能的编码方式(Uuencode、Base64、QP或HZ等其它编码方式)进行判断将能使我们的破解工作事半功倍。 #1 六、乱码防范之日常措施篇 #1 1.选用大众流行的电子邮件软件 由于不同的电子邮件软件支持的编码有所不同,收件人和发件人自己定制的一些选项也各不相同,所以在收到编码过的邮件后,系统不一定就能识别出邮件所用过的编码方法。如果识别不出编码方法,则系统自然无法自动解码。这样当你查看邮件内容时,就会出现所谓的乱码而无法阅读。选用大众流行的电子邮件软件(如OutLook Express、Foxmail、Eudora和The Bat!等)可以在一定程度上避免这种尴尬的出现,因为这样的邮件软件一来用的人多,二来支持的协议一般来说也较多,所以出现无法自动解码的几率相对而言会小得多。除此之外,你还必须设置好你的电子邮件软件,特别是其默认的简体中文环境。现在有许多电子邮件软件允许你选择邮件的编码解码方式,你无论如何也要选择MIME,因为这是目前使用最广泛、支持率最高的协议。如果你的电子邮件软件连它都不支持,你应该考虑换一种软件了。 #1 2.最好不使用电子邮件软件特别的编辑功能 Outlook Express的邮件编辑器是个功能很强的HTML编辑器,你甚至可以编辑五颜六色、各种字体的电子邮件。然而,如果接收方不是也使用Outlook Express来接收邮件的话,可能就只能看到HTML源代码,这对于电脑初学者也许就意味着是“乱码”。不过也有解决的方法:在撰写邮件时,选择“格式”菜单下的“纯文本”选项。如果要将发送格式的缺省值设置为“纯文本”,那么在Outlook Express主窗口中,打开菜单栏“工具”/“选项”,并在出现的选项设置对话框中单击“发送”选项卡,将邮件发送格式设置为“纯文本”。 #1 3.最好用记事本撰写邮件内容后再插入邮件 对于特别重要的邮件,发信件前最好是先用记事本进行录入编辑,然后再利用菜单中的“插入文本中的文件”命令将所写内容复制到电子邮件的内容框中,这之后再发出,对方一般不会收到乱码。 #1 4.编码文件最好添加足够的邮件“信头” 如果你要发送特定编码的邮件,最好添加足够的邮件“信头”信息,这样能够一定程度上保证邮件能够被正确解码。建议对Uuencode编码用Uuencode encoding作信头,对Base64编码用Base64 encoding作信头,对QP编码用Printable encoding作信头。具体信头内容见前面篇章所述。 #1 5.尽可能利用附件功能发送邮件和文件 一般电子邮件软件的“附件”功能可以自动对非标准ASCII码格式的邮件文件自动进行Base64 方式编码(仅对附件部分进行编码),然后再进行发送。如果收信人的电子邮件软件能够区别邮件的这种编码方式(目前绝大多数电子邮件软件都支持MIME/Base64编码),则可以自动将邮件解码,而不会再出现乱码。因此强烈建议你采用这种方式发送中文邮件或非标准ASCII码格式的文件。 #1 6.发送重要邮件时最好先发测试信 发送重要的邮件信息时,为了确认是否无须编码即可发送正文(如果你不方便利用附件功能),你应该先在正文中用中文给收件人发一封测试信,而且还应确定收件人能否对邮件正文进行解码。如果发送已经编码的邮件,也最好添加足够的“信头”信息,以便收件人知道其所需的解码方法。 #1 7.可以考虑将中文文件转换为图像文件随附件发送 如果你向没有安装中文平台的人发送中文电子邮件,则可以考虑将中文文件转换为图像文件并随附件发送,这样做的好处是可以让收件方不用任何转换平台就能阅读你的中文邮件,具体做法包括用扫描仪将信件和图片制作成*.gif或*.jpg图形文件,并放在附件里发送;用Word应用程序或其他制图软件以在图片上打字的方法将中文内容转化为图像文件,放在附件里发送,这种方法还不需要扫描仪。 #1 8.电子邮件软件最好统一定义为中文简体(GB2312)编码 为了减少收信时出现乱码的现象,建议大家在使用电子邮件软件时统一都将字体的“国际设置”定义为“简体中文(GB2312)”。在中文版的Outlook Express或Outlook中,其缺省的设置都是中文简体(GB2312)编码,无需更改。但如果你要手动修改,也可以在Outlook Express中单击菜单栏“工具”/“选项”选项,选择“阅读”标签,并单击“国际设置”按钮,在其中选中“为接收所有邮件使用默认编码”。 #1 9.接收Uuencode编码的邮件最好不要使用Eudora软件 这是因为Eudora这个电子邮件软件会将附件文件恢复成二进制文件并存放在另一个目录里。对于分成多块传送的Uuencode代码,Eudora会将这些代码的第一部分恢复成文件,而后面的就不管了(这显然是不完整的)。这会妨碍你以后人工合并这些邮件。很多人使用The Bat!这种邮件软件,它对附件的文件究竟是恢复到目录中还是留在信体里会提供一个选项给你选择,在这种情况下你也要特别注意正确作出选择。 该文章在 2012/1/12 23:51:55 编辑过 |
关键字查询
相关文章
正在查询... |