piapia123
zh

uuencode 与 xxencode 编解码

网络

所有处理都在浏览器本地完成,数据不上传服务器

输入
把文件拖到这里可直接载入
输出

uuencode 是邮件与 Usenet 时代用来把二进制塞进纯文本的编码:每 3 个字节编成 4 个可见字符,每行开头一个字符表示「这一行有多少字节」。这里支持 uuencode、xxencode 与 base64 变体三种,编码方向给出含 `begin` / `end` 的整份文本,可以直接贴进邮件或保存成 `.uu` 文件。解码方向严格校验:行首长度与实际字符数对不上、出现字母表之外的字符,都会指出第几行,绝不静默截断。中文按 UTF-8 取字节。全部在浏览器本地完成,数据不出这台设备。

功能

  • 三种变体:uuencode、xxencode、base64 变体
  • 编码方向输出含 begin / end 的整份文本,可直接保存
  • 解码方向严格校验,并指出出错的是第几行
  • 行首长度与实际字符数不符时直接报错,不做截断
  • 零字节用反引号表示(不会被邮件系统吃掉),解码时空格与反引号都认
  • 每行字节数可调(30–60),文件名可自定义
  • 解码结果给出文件名、权限、字节数与数据行数

使用方法

  1. 选择模式:编码或解码
  2. 选择变体(uuencode / xxencode / base64)
  3. 编码时输入文本;解码时粘贴整份 uuencode 文本
  4. 点「复制」取走结果

常见问题

uuencode 每行的第一个字符是什么?
它是这一行的字节数 + 32。比如 `M` 的码值是 0x4D = 77,减 32 得 45 —— 说明这一行装了 45 个字节。字节数为 0 时这个字符是反引号 `` ` ``(传统上也可能写成空格),表示数据到此结束。
为什么 uuencode 用反引号表示 0,而不是空格?
因为邮件和论坛系统常常把行尾的空格吃掉,而反引号不会被吃掉。如果 0 写成空格,一行末尾的零会被静默删除,解出来的文件就少几个字节。反引号是为了在传输中活下来才选定的。
base64 变体和普通的 Base64 是一回事吗?
字母表一样,但外层的包装不同。base64 变体(`begin-base64 … ====`)是 uuencode 家族的一员,把 base64 数据装进同样的 begin/end 框架里,因此它同样受「整行整段」的约束;而裸 Base64 没有这些首尾行。
解码报「第 N 行的首字符说这一行有 X 个字节,但实际有 Y 个」是什么意思?
说明这一行被改动过:要么复制时少了几个字符,要么中间混入了换行。uuencode 每行是自洽的(行首声明长度),所以一旦对不上,整行就不可信。工具不做「按短的来」这种截断,而是明确报错。

相关工具