Xxencode 编码与 Xxdecode 解码

用 xxencode 编码文本、十六进制字节或文件,或把 xxencode 数据块解码还原。它的字母表只包含字母、数字、加号和减号。

完全在浏览器中运行,不会上传任何数据。

使用方法

  1. 选择“编码”生成 xxencode 数据块,或选择“解码”把数据块还原为数据。
  2. 保留 begin 和 end 行并设置文件名可得到完整的数据块;关闭该选项则只输出数据行。
  3. 输入或粘贴内容,也可以打开文件,结果会随输入实时更新。
  4. 复制或下载结果。解码时如果数据不是文本,请选择十六进制输出或直接下载文件。

什么是 xxencode?

xxencode 保留了 uuencode 的结构,只更换了字符。它同样把每 3 个字节拆成 4 个 6 位的值,每个数据行同样以长度字符开头、最多对应 45 个字节,整个数据块同样位于 begin 644 文件名 行和 end 行之间。

64 个值依次对应 +、-、数字 0-9、大写字母 A-Z 和小写字母 a-z。长度字符也使用同一张表,因此满 45 字节的行以 h 开头,end 之前的空行则是一个 +。由于格式完全相同,输出大小也与 uuencode 一样:算上长度字符和换行符,约比原数据大 38%。

xxencode 诞生的原因

uuencode 的结果中有大量标点符号,例如 [、]、\、^ 和 !。IBM 大型机使用 EBCDIC 而不是 ASCII,而这些字符在不同的 EBCDIC 代码页中位置并不相同。邮件经过 ASCII 网络与 EBCDIC 网络之间的网关时,这些字符可能被错误转换,导致文件损坏。

字母、数字、加号和减号在所有 EBCDIC 代码页中都是一致的,因此 xxencode 文本可以在两种字符集之间双向无损转换。后来的 MIME 也采用了同样的思路:Base64 只使用字母、数字和少数在 ASCII 与 EBCDIC 中完全相同的符号。xxencode 从未像 uuencode 那样普及,最终两者都被 Base64 取代。

uuencode 与 xxencode 对比

uuencodexxencode
字符ASCII 32 到 95,零值用反引号+ - 0-9 A-Z a-z
满 45 字节的行开头Mh
end 之前的最后一行`+
能否安全通过 EBCDIC 网关否是

编码规格

字母表+ - 0-9 A-Z a-z
输出体积约 137%,含行首长度字符
填充每行最多 45 字节
标准xxencode
区分大小写是

编码示例

输入 (UTF-8)输出
Hello, World!begin 644 data.bin BG4JgP4wg63RjQalY6E++ + end
Base64.isbegin 644 data.bin 7Ea3nNHMo9aZn + end
你好begin 644 data.bin 4t9qUtOKx + end

常见问题

如何区分 uuencode 和 xxencode?
看数据行即可。xxencode 的数据行只包含字母、数字、加号和减号,满行以 h 开头;uuencode 的数据行含有标点符号,满行以 M 开头。如果在这里解码时提示无效字符,可以试试 uuencode 页面。
工具会生成 begin 和 end 行吗?
会。默认会输出带有你所填文件名的 begin 644 行以及结尾行。如果只需要编码后的数据行,关闭该选项即可。
没有 begin 行也能解码吗?

可以。没有 begin 行时,所有非空行都会被当作数据解码;有 begin 行时,解码从它之后开始,到 end 行结束,前后的其他文字会被忽略。

xxencode 现在还有人用吗?
很少。如今主要出现在旧的邮件和新闻组存档中。新数据建议使用 Base64,它几乎处处受支持,在只能传输文本的渠道中同样安全。