上传文件
  1. base64hub
  2. 其他进制编码
  3. Uuencode

Uuencode 和 Uudecode 在线转换

输入文本,得到带 begin 和 end 行的经典 uuencode 输出。切换方向即可 uudecode:粘贴整封消息,解码器会找到 begin 行,解码数据块,并以原始文件名提供下载。

免费 无需注册,不限次数 本地 不上传任何内容 文件名 从 begin 行读取 更新于 2026年10月27日
输入 0字节 0 B输出 0

在你的浏览器中处理。此页面无法将你的数据发送到任何地方: 我们如何确认

如何进行 uuencode 和 uudecode

编码:

  1. 在 输入 · 文本 中输入或粘贴文本。uuencode 编码块显示在 输出 · uuencode 中。
  2. 在输出下方设置 文件名,它会写进 begin 行。默认是 data.bin。
  3. 如果只需要编码后的数据行(比如要嵌入其他格式中),取消勾选 begin/end 行。

解码:

  1. 在方向切换中点击 uuencode → 文本。
  2. 粘贴 uuencode 数据。可以连同周围的邮件或新闻组文字一起粘贴;begin 行之前的内容都会被跳过。
  3. 在输出中查看文本,或点击 保存字节,以 begin 行中的文件名下载解码后的文件。对于二进制内容,可以先把 到 设为 Hex 查看一下。

uuencode 文件的结构

用文件名 hello.txt 编码文本 Cat,得到:

begin 644 hello.txt
#0V%T
`
end
  • begin 644 hello.txt 给出 Unix 权限和文件名。
  • 每个数据行以一个长度字符开头:该行的字节数加 32。# 是 35,所以这一行有 3 个字节。完整的一行有 45 个字节,以 M 开头,后面跟 60 个字符。
  • 数据字符的原理和 Base64 很像:每 3 个字节变成 4 个 6 位值,每个值 v 写成编码为 v + 32 的字符。值为 0 时写成反引号,而不是空格。
  • 只有一个反引号的那一行是长度为 0 的空行,end 结束整个块。

较长的输入可以展示完整行的结构:

begin 644 fox.txt
M5&AE('%U:6-K(&)R;W=N(&9O>"!J=6UP<R!O=F5R('1H92!L87IY(&1O9RX@
*,#$R,S0U-C<X.0``
`
end

这是 The quick brown fox jumps over the lazy dog. 0123456789:M 行有 45 个字节,* 行有 10 个(42 − 32 = 10)。每一行都带有自己的长度字符和一个换行符,所以 uuencode 数据比输入大约大 38%,比 Base64 略多。

uuencode 还会出现在哪里

uuencode 源自 Unix-to-Unix Copy(UUCP),在 MIME 出现之前,是通过电子邮件和 Usenet 发送二进制文件的标准方式。如今,你会在旧的邮件归档、Usenet 帖子、一些嵌入式和大型机的文件传输,以及把文件通过管道传给 mail 的脚本中遇到它。

反引号的约定也来自那个年代。有些网关会删掉行尾的空格,这会破坏用空格表示零的数据;反引号则能保留下来。本编码器写出反引号,解码器两种都接受。

在命令行和 Python 中使用 uuencode

安装 GNU sharutils 之后:

uuencode hello.txt hello.txt > hello.uu
uudecode hello.uu

第一个参数是输入文件,第二个是写进 begin 行的名字。uudecode 会在当前目录中以这个名字创建文件。给 uuencode 加上 -m 则改为输出 Base64。

在 Python 中,binascii 每次编码一行,最多 45 个字节:

import binascii

binascii.b2a_uu(b"Cat", backtick=True)   # b'#0V%T\n'
binascii.a2b_uu(b"#0V%T")                # b'Cat'

begin 644 name 行、结尾的反引号行和 end 需要你自己加上。更多编码示例见 Python 页面。

常见问题

  • 在位置 1 报错。 既没有 begin 行,文本也不是单纯的 uuencode 数据行。请检查是否复制了完整的块。
  • begin-base64 块解码出乱码。 这个块是 uuencode -m 写出的,内容是 Base64。把 begin-base64 和 ==== 之间的行复制到 Base64 解码器 中。
  • 文件被截断,或者行尾附近的字节不对。 邮件客户端重新换行或删掉了行尾空格。每个数据行都必须完整;请设法获取原始附件或邮件源码。
  • 多部分的帖子只能解码一部分。 大文件过去常被拆分到多封消息中。解码前请按顺序把各部分拼起来,只保留一个 begin 和一个 end。

常见问题

提示 uuencode: command not found 怎么办?

大多数 Linux 系统默认没有安装这个命令。在 Debian 和 Ubuntu 上,sudo apt install sharutils 会安装 uuencode 和 uudecode;Fedora 也有 sharutils 软件包。

begin 644 是什么意思?

644 是解码后文件应有的 Unix 文件权限(所有者可读写,其他人只读),后面的词是文件名。uudecode 会创建这个文件;本页面用这个名字作为 保存字节 的文件名。

uuencode 和 Base64 一样吗?

两者都把 3 个字节变成 4 个字符,但 uuencode 使用从空格到下划线的 ASCII 范围,并且每行加一个长度字符。Base64 的字母表不同,MIME 邮件使用的是 Base64。uuencode -m 会在 begin-base64 块中写入 Base64。

Python 还能解码 uuencode 文件吗?

能,用 binascii.a2b_uu 逐行解码。更高层的 uu 模块在 Python 3.11 中被弃用,并在 3.13 中移除。