乱码大全(23)──XXEncode 和 Btoa

来源:百度文库 编辑:神马文学网 时间:2024/04/28 11:01:02
乱码大全(23)──XXEncode 和 Btoa  “乱码大全”,作者:bluesea,水木清华 BBS 成员。欢迎在 BBS 中转载,帮助计算机初学者解决使用软件过程中遇到的实际问题。本文原载于水木清华 BBS 的 Internet讨论区。地址是: telnet://bbs.tsinghua.edu.cn ,WWW访问的地址是 http://bbs.tsinghua.edu.cn 。当下面的条件全部满足时,转载本文可以不经过作者允许:(1) 转载水木清华 BBS 的信头;(2)不修改原文;(3) 转载仅限于各种 BBS 和非商业性质的个人网点。严禁各种形式的抄袭,严禁非作者将 本文或局部用于任何正式出版的刊物。请所有转载文章的网友注意阅读本文的第一段,遵守网络的惯例、尊重作者的劳动。本自然段是全文的一部分。
bluesea@163.net
还有两个编码方式,在 E-mail 与网络通信中用于将 8 位二进制数据编码为 7 位 ASCII 码。我们在收取 E-mail,尤其是跨平台的通信中,仍然可能会遇到这两种编码。不过这两种编码出现的频度没有那么普遍。从编码的作用上,它们完全雷同于 UUEncode、MIME、UTF-7 等编码的作用,即使得数据能够安全通过各 SMTP 和邮件网关而不丢失和混乱。只能通过 7 位乃至 6 位数据的网络主要分布于一些大型机系统中。
XXEncode 编码
*************
本文前面的的部分提到过 UUEncode,也是这个 BBS 上用于发表小型二进制文件的最常用的方法。XXEncode 和它非常相似。事实上,很多支持 UUEncode、 UUDecode 编解码的工具都同时还支持 XXEncode/XXDecode,如 Winzip 等。 但这两种编码本身是不兼容的。XXencode 编码的文件可以 .XX 或 .XXE 为后缀名。
XXEncode 比 UUencode 提出的要晚,它的编码算法和 UUencode 基本相同,但是使用的是不同的字符集。XXEncode 编码使用的字符是:+-01..89ABC...XYZa bc...xyz,与 UUencode 相比,它的特殊字符更少。 XXEncode 用于将二进制文件转换为 EBCDIC 兼容的 ASCII 码。实际上 UUencode 编码中的有些字符无法正确通过 EBCDIC-ASCII 转换。实际上,一些 IBM 大型机经常使用 EBCDIC 而 非 ASCII 码。向这些计算机传送数据时可使用 XXencode 代替 UUEncode 方案。而 Uuencode 的优点是没有小写字母,不过今天的网络通道中传送小写字符已经 没有任何问题了。
下面是 XXEncode 编码的一个例子。
begin 644 hello.txt
h60+U684kkh90uvHnm8iVgOCgpzTJruCuMalpNLBZMOCgmuv2jgTZiud0EZCn
hmRGlcOCvhUo8ourIqW-0EZDKoBSepBWXf91jpjewlgjXizenxR4bpRyxsfvq
hmfbHkwXhjDutzPDAph1HxUo8hPqplAepjAfCmgnWcOCljgv2p8rIqBDOmuv2
VjgTZiucUEY7H69L262ZiR4JmPaJonBP0qko8lzWVcko8
+
end
与 UUencode 不同的是,XXEncode 编码中,除最后两行外,每行数据以字母‘h‘开头,而不是‘M‘。将 XXencode 编码的文件的后缀名改为 .XXE,可以双击它启动 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 是另一种将二进制文件转换为 ASCII 可打印字符的编码方式。也是设计用于传输邮件的方法之一。一些主机不具备某些空白字符,无法正确传输一些文件,BtoA 的设计就是意图避免这个问题的发生。然而 BtoA 在某些 EBCDIC 系统中仍然有问题。 BtoA 的转换方法是将相邻的 4 个字节用 ‘!‘ 到 ‘u‘ 这85个字符表示成 5 个字节。字符 x 用于行首行尾,字符 ‘z‘ 或 ‘y‘ 用于表示 4 个连续的空格。因为由于这个算法是模 85 (‘u‘-‘!‘+1=85) 的算法,因此它的编码效率比 UU/XXEncode 或 Base64 要高。
下面是 BtoA 编码的一个例子:
xbtoa Begin example.txt
+UTE)Ae_d.5@Vg0uF(JdTXNRcb^;
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 的源程序。