2006
03-25

“乱码大全”,作者:bluesea,水木清华BBS成员。欢迎在 BBS中转载,帮助计算机初学者解决使用软件过程中遇到的实际问题。本文原载于水木清华 BBS的 Internet讨论区。地址是: telnet://bbs.tsinghua.edu.cn ,WWW访问的地址是 http://bbs.tsinghua.edu.cn   。当下面的条件全部满足时,转载本文可以不经过作者允许:(1) 转载水木清华 BBS 的信头;(2)不修改原文;(3) 转载仅限于各种 BBS 和非商业性质的个人网点。 严禁各种形式的抄袭,严禁非作者将本文或局部用于任何正式出版的刊物。请所有转载文章的网友注意阅读本文的第一段,遵守网络的惯例、尊重作者的劳动。本自然段是全文的一部分。

    字符是计算机表达信息的主要方式,字符的主体部分是美国信息交换标准码ASCII,现代的 ASCII 是一个七位的编码标准,包括可打印符号、控制符号等。由于计算机通常用“字节(byte)”这个八位的存储单位来进行信息交换,因此不同的计算机厂家对ASCII 进行了扩充对值大于 127 的 128 个符号予以定义,并赋予符的形状。如 MS-DOS 使用 OEM 字符集,Windows 支持 ANSI、Symbol、OEM 等字符集,它们在值为 127 以上的部分一般都是不统一的, 这些“扩展的ASCII”字符只有在特定的环境下才具有“交换”的意义。


    计算机以及很多计算机网络协议的制定都是建立在ASCII 码的基础上的,但是ASCII 码用于计算机信息的表示有很大的不足,主要表现在多国文字、图形、声音等二进制文件、信息压缩、信息保密等很多方面。 因此,在 ASCII 和扩展ASCII 码的基础上,用一定的规则定义一些新的信息表达形式,就形成了信息传输和处理中的一大类概念和事物,即编码和解码。当信息编码和解码能够统一的时候,信息是可以交换和被理解的;相反,当信息编码和解码不能够统一的时候,信息就不能被交换和理解,这就是“乱码”。(以下不再使用引号)


    乱码的产生既然是信息编码和解码不能够统一的结果,因此,解决乱码的过程就是找到和编码相统一的解码方法,并对计算机软件不能全自动进行适当解码的信息进行重新的处理和解码,使得恢复信息可以被理解和交换的目的。


    本文针对 BBS 上常见的问题,对初学者比较全的介绍一下各种乱码的产生、判断和解决方法。可以说,常见的乱码有这样一些规律:(1) 和汉字或其他国家的文字有关;(2) 经常发生在 email 的阅读中; (3) 和传送二进制文件有关;(4) 和信息的加密解密有关。而乱码的原因正如前面所说的,和软件的版本,即他们能够自动识别和使用的解码协议有密切的关系。本文的写作主要针对 DOS/Windows 操作系统的用户。


    本文以 email 和 WWW 中经常出现的、出学者不易理解的特殊标记、乱码等现象,以乱码的识别、原因和解决方法为主线,涉及:ROT13、汉字乱码、ANSI、UUENCODE、MIMENCODE、QUATED-PRINTABLE、HTML、 文件格式和数据加密等方面。是个大杂货店。


“我遇到乱码怎么办?”这是几乎我们每个人都曾经遇到的问题。我想稍微总结一下这个大家关心的问题也有一些时间了,不过 Internet 博大精深,到动笔时感到知识实在是极度匮乏。那些曾经熟悉的东西写出来好像就不是那么回事。在做水木清华 BBS 病毒讨论区板主的这段时间里遇到的大量问题中, 更多的是出在与病毒相似却不是病毒的地方,比如计算机硬件软件本身的问题,某些国产反病毒软件因质量问题破坏文件和系统等等。所以,要把计算机用的更顺手,需要的是更多地了解你所使用的这个工具。防范病毒只是一个方面。一个新手,当你有机会迈进 Internet 的时候,你已经拥有这个博大精深的世界的一半了,只是有很多人还浑然不知。 Internet 就是你的老师,你自己就是你的老师。


我希望大家对这个系列提出一些意见、补充和建议,以便修改其中文章中的错误、Bug 或充实没有概括到的内容。


脊柱是我们这种生命的重要特征,在此基础上我们才有了光芒的智慧和丰富的情感。上帝赋予我们自由的意志,同时也赋予我们选择的重担。


※ 来源:·BBS 水木清华站 bbs.net.tsinghua.edu.cn·[FROM: jet.ncic.ac.cn]


发信人: bluesea (蓝海), 信区: Internet
标 题: 乱码大全(2)──ROT13
发信站: BBS 水木清华站 (Tue Feb 3 00:56:44 1998)


乱码大全(2)──ROT13


Jvgu n tbbq pbafpvrapr bhe bayl fher erjneq, jvgu uvfgbel gur svanywhqtr bs bhe qrrqf, yrg hf tb sbegu gb yrnq gur ynaq jr ybir, nfxvatUvf oyrffvat naq Uvf uryc, ohg xabjvat gung urer ba rnegu Tbq’f jbexzhfg gehyl or bhe bja.Wbua Svgmtrenyq Xraarql


如果你自己能够看懂上面的短文,那么请忽略本文的其余部分。
如果有人写来一封莫名其妙的信, 含有“V Ybir lbh!”这样的句子,也许你还有可能以为这是德语。其实这是一种最简单的通用编码──ROT13, 这个句子实际上是“I Love you!”。不懂德语的人经常要闹笑话,Usenet 上经常有这样的标题:This is not ROT13, it’s German. 或者 This isn’t German, it’s

ROT13. 足见这个误会是世界性的。
ROT13 是一种简单的编码,它把字母分成前后两组,每组13个,编码和解码的算法相同,仅仅交换字母的这两个部分,即:[a..m] –> [n..z] 和 [n..z]–> [a..m] (–> Caesar 13)。 英国帝国大学计算机在线字典解释 ROT13 时说:“It is used to enclose the text in a sealed wrapper that the readermust choose to open – e.g. for posting things that might offend somereaders, or spoilers. ” ROT13 用简易的手段使得信件不能直接被识别和阅读,也不会被搜索匹配程序用通常的方法直接找到。经常用于 USENET 中发表一些攻击性或令人不快的言论或有简单保密需要的文章。


常见的 email/news reader 程序都可以对 ROT 13 进行解码,如 Netscape和 Microsoft News 等。一些 Text 编辑程序也可以实现 ROT13 的解码。 比如EditPad( http://www.tornado.be/~johnfg/   ,双牛站的 HTML TextEditor分类下面也可以下载)。由于 ROT13 是自逆算法,所以,解码和编码是同一个过程。
下面的 C 程序是最短的 ROT13 处理程序,它只有78个字符。当然在MSVC编译中会得到没有库声明的警告或错误。main(c){while((c=getchar())+1)putchar(isalpha(c)?tolower(c)<’n'?c+13:c-13:c);}
(出处: http://www.cis.ohio-state.edu/~fine/rot13.html   )


下面的宏可用于 Word6、7 进行 ROT13 编解码:( 本程序的出处:Subject:Re: ROT13 Macro / From:
wncoan@aol.com (WNCOAN) / Date: 1998/01/29 /Newsgroups: microsoft.public.word.programming )
Sub MAIN
StartOfDocument
While Not AtEndOfDocument()
If Asc(Selection$()) > 64 And Asc(Selection$()) < 91 Then
newAsc = Asc(Selection$()) + 13
If newAsc > 90 Then newAsc = newAsc – 26
CharRight 1, 1
Insert Chr$(newAsc)
ElseIf Asc(Selection$()) > 96 And Asc(Selection$()) < 123 Then
newAsc = Asc(Selection$()) + 13
If newAsc > 122 Then newAsc = newAsc – 26
CharRight 1, 1
Insert Chr$(newAsc)
Else
CharRight
EndIf
Wend
End Sub
下面这些网址以 cgi 的方式提供在线的 ROT13 转换。
http://otto.cmr.fsu.edu/~davis_t/rot13.cgi
http://as.alliancestudio.com/tk/rot13.html
http://www.rtg.se/~niclas/reddwarf/rot13.htm


到现在为止,您已经可以对本文开始的那一段代码进行解码了。那是美国前总统肯尼迪的一段演说。


汉字乱码是一个古老的问题了。自从汉字走进计算机,关于汉字乱码的问题一天也没有消失过。有关汉字和 HTML 的问题,将在本文系列的稍后的文章中单独谈到。本文不准备重复 GB_2312-80(国标)、BIG5、GBK、HZ 的最基本的互相转换的问题,相关的内容可以在本 BBS Chinese 板询问。 这里以其他角度做一
些补充。


由于编码位置上的巧合和汉字平均出现概率上的统计,用GB环境看BIG5编码的文字,将有汉字显示成为日语的假名,这个是在GB环境下看到BIG5汉字的主要特征。上网时间长一些,就会积累一些经验,使得你能够一眼区分乱码的类型。比如下面的例子就是 BIG5:


¨睹絏


留下一个回复