亂碼大全(23)──XXEncode 和 Btoa
“亂碼大全”,作者:bluesea,水木清華 BBS 成員。歡迎在 BBS 中轉(zhuǎn)載,幫助計(jì)算機(jī)初學(xué)者解決使用軟件過(guò)程中遇到的實(shí)際問(wèn)題。本文原載于水木清華 BBS 的 Internet討論區(qū)。地址是: telnet://bbs.tsinghua.edu.cn ,WWW訪(fǎng)問(wèn)的地址是 http://bbs.tsinghua.edu.cn 。當(dāng)下面的條件全部滿(mǎn)足時(shí),轉(zhuǎn)載本文可以不經(jīng)過(guò)作者允許:(1) 轉(zhuǎn)載水木清華 BBS 的信頭;(2)不修改原文;(3) 轉(zhuǎn)載僅限于各種 BBS 和非商業(yè)性質(zhì)的個(gè)人網(wǎng)點(diǎn)。嚴(yán)禁各種形式的抄襲,嚴(yán)禁非作者將 本文或局部用于任何正式出版的刊物。請(qǐng)所有轉(zhuǎn)載文章的網(wǎng)友注意閱讀本文的第一段,遵守網(wǎng)絡(luò)的慣例、尊重作者的勞動(dòng)。本自然段是全文的一部分。
bluesea@163.net
還有兩個(gè)編碼方式,在 E-mail 與網(wǎng)絡(luò)通信中用于將 8 位二進(jìn)制數(shù)據(jù)編碼為 7 位 ASCII 碼。我們?cè)谑杖?E-mail,尤其是跨平臺(tái)的通信中,仍然可能會(huì)遇到這兩種編碼。不過(guò)這兩種編碼出現(xiàn)的頻度沒(méi)有那么普遍。從編碼的作用上,它們完全雷同于 UUEncode、MIME、UTF-7 等編碼的作用,即使得數(shù)據(jù)能夠安全通過(guò)各 SMTP 和郵件網(wǎng)關(guān)而不丟失和混亂。只能通過(guò) 7 位乃至 6 位數(shù)據(jù)的網(wǎng)絡(luò)主要分布于一些大型機(jī)系統(tǒng)中。
XXEncode 編碼
*************
本文前面的的部分提到過(guò) UUEncode,也是這個(gè) BBS 上用于發(fā)表小型二進(jìn)制文件的最常用的方法。XXEncode 和它非常相似。事實(shí)上,很多支持 UUEncode、 UUDecode 編解碼的工具都同時(shí)還支持 XXEncode/XXDecode,如 Winzip 等。 但這兩種編碼本身是不兼容的。XXencode 編碼的文件可以 .XX 或 .XXE 為后綴名。
XXEncode 比 UUencode 提出的要晚,它的編碼算法和 UUencode 基本相同,但是使用的是不同的字符集。XXEncode 編碼使用的字符是:+-01..89ABC...XYZa bc...xyz,與 UUencode 相比,它的特殊字符更少。 XXEncode 用于將二進(jìn)制文件轉(zhuǎn)換為 EBCDIC 兼容的 ASCII 碼。實(shí)際上 UUencode 編碼中的有些字符無(wú)法正確通過(guò) EBCDIC-ASCII 轉(zhuǎn)換。實(shí)際上,一些 IBM 大型機(jī)經(jīng)常使用 EBCDIC 而 非 ASCII 碼。向這些計(jì)算機(jī)傳送數(shù)據(jù)時(shí)可使用 XXencode 代替 UUEncode 方案。而 Uuencode 的優(yōu)點(diǎn)是沒(méi)有小寫(xiě)字母,不過(guò)今天的網(wǎng)絡(luò)通道中傳送小寫(xiě)字符已經(jīng) 沒(méi)有任何問(wèn)題了。
下面是 XXEncode 編碼的一個(gè)例子。
begin 644 hello.txt
h60+U684kkh90uvHnm8iVgOCgpzTJruCuMalpNLBZMOCgmuv2jgTZiud0EZCn
hmRGlcOCvhUo8ourIqW-0EZDKoBSepBWXf91jpjewlgjXizenxR4bpRyxsfvq
hmfbHkwXhjDutzPDAph1HxUo8hPqplAepjAfCmgnWcOCljgv2p8rIqBDOmuv2
VjgTZiucUEY7H69L262ZiR4JmPaJonBP0qko8lzWVcko8
+
end
與 UUencode 不同的是,XXEncode 編碼中,除最后兩行外,每行數(shù)據(jù)以字母‘h‘開(kāi)頭,而不是‘M‘。將 XXencode 編碼的文件的后綴名改為 .XXE,可以雙擊它啟動(dòng) Winzip 獲得解碼。還有很多程序,如:
fastcode 32 : http://www.angelfire.com/ca/kent/
zipmagic : http://www.mijenix.com
wincode : http://www.members.global2000.net/snappy/wincode.html
http://www.rarf.riken.go.jp/archives/CTAN/archive-tools/xxcode/xxencode.c
(源程序)
BtoA 編碼
*********
BtoA,就是 Binary to ASCII。BtoA 是另一種將二進(jìn)制文件轉(zhuǎn)換為 ASCII 可打印字符的編碼方式。也是設(shè)計(jì)用于傳輸郵件的方法之一。一些主機(jī)不具備某些空白字符,無(wú)法正確傳輸一些文件,BtoA 的設(shè)計(jì)就是意圖避免這個(gè)問(wèn)題的發(fā)生。然而 BtoA 在某些 EBCDIC 系統(tǒng)中仍然有問(wèn)題。 BtoA 的轉(zhuǎn)換方法是將相鄰的 4 個(gè)字節(jié)用 ‘!‘ 到 ‘u‘ 這85個(gè)字符表示成 5 個(gè)字節(jié)。字符 x 用于行首行尾,字符 ‘z‘ 或 ‘y‘ 用于表示 4 個(gè)連續(xù)的空格。因?yàn)橛捎谶@個(gè)算法是模 85 (‘u‘-‘!‘+1=85) 的算法,因此它的編碼效率比 UU/XXEncode 或 Base64 要高。
下面是 BtoA 編碼的一個(gè)例子:
xbtoa Begin example.txt
+
o?IW^9$NZcU_%Tqf6.%1:RdeCl$36;uI^f;d?QUTC]gf)!&
!bN$52Zh;_De_e("^@o^[e&08o]`,J?Zcq"Ie+O4X[Crudb
-en)cH=AjTqem,cG\57eC`7(bHAdta5sq5+@8Cn+LT-18T&
W]Ec,H1bgsYc%1:/NTq`&(
xbtoa End N 168 a8 E 9 S 6e03 R ed287c44
fastcode 32 (http://www.angelfire.com/ca/kent/) 支持 BTOA 的編解碼。還可以從 ftp://hpux.csc.liv.ac.uk/hpux/Misc/btoa-5.2/ 下載 BtoA 的源程序。
聯(lián)系客服