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

Xxencode 和 Xxdecode 在线转换

输入文本,得到 xxencode 输出:这是 uuencode 的一种变体,只使用字母、数字、+ 和 -。切换方向即可 xxdecode 一个数据块,文件名取自它的 begin 行。

免费 无需注册,不限次数 本地 不上传任何内容 64 个安全字符 + - 0-9 A-Z a-z 更新于 2026年10月27日
输入 0字节 0 B输出 0

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

如何进行 xxencode 和 xxdecode

编码:

  1. 在 输入 · 文本 中输入或粘贴文本。xxencode 编码块显示在 输出 · xxencode 中。
  2. 在输出下方把 文件名 设为接收方应该得到的名字;默认是 data.bin。
  3. 如果只需要数据行,取消勾选 begin/end 行。

解码:

  1. 在方向切换中点击 xxencode → 文本。
  2. 粘贴数据块。begin 行之前的任何文字(比如邮件头或附言)都会被跳过。
  3. 查看结果;对于二进制内容,把 到 设为 Hex;或点击 保存字节,以 begin 行中的文件名下载。

为什么会有 xxencode

uuencode 的字母表是从空格(或反引号)到 _ 的所有字符,其中包括 [、]、^、\ 和 !。在 ASCII 与 EBCDIC 系统之间(其中包括 IBM 大型机和 BITNET 网络)的邮件网关上,这些字符会带来麻烦,因为它们在 EBCDIC 中没有唯一的对应字符。文件到达时字符被替换,解码出来就是乱码。

xxencode 保留了 uuencode 的结构,把字母表换成了 64 个能可靠转换的字符:+、-、0–9、A–Z 和 a–z。值 0 是 +,值 1 是 -,数字从值 2 开始,小写 z 是 63。

uuencode 与 xxencode 对比

同样的输入分别用两种格式编码,文件名为 hello.txt:

输入uuencode 数据行xxencode 数据行
Cat#0V%T1Eq3o
Hello, world,2&5L;&\L('=O<FQDAG4JgP4wg65RjQalY
4 个零字节$````````2++++++++

每行的第一个字符是用该格式自己的字母表表示的字节数:3 在 uuencode 中是 #,在 xxencode 中是 1;12 分别是 , 和 A;4 分别是 $ 和 2。完整的 45 字节行在 uuencode 中以 M 开头,在 xxencode 中以 h 开头。

一个完整的 xxencode 文件是这样的,这里编码的是保存为 fox.txt 的 The quick brown fox jumps over the lazy dog. 0123456789:

begin 644 fox.txt
hJ4VZ653pOKBf647mPrRi64NjS0-eRKpkQm-jRaJm65FcNG-gMLdt64FjNmsU
8A12mAnEpBXQsCE++
+
end

大小与 uuencode 相同:每 3 个字节 4 个字符,每行再加一个长度字符和一个换行符,比输入大约大 38%。

在 Python 中使用 xxencode

Python 没有 xxencode,但 binascii.b2a_uu 生成的是同样的 6 位值,所以把它的输出从 uuencode 字母表转换为 xxencode 字母表,就能得到正确的 xxencode 行,包括长度字符:

import binascii

UU = "`" + "".join(chr(c) for c in range(33, 96))
XX = "+-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
TO_XX = str.maketrans(UU, XX)

def xxencode_line(chunk: bytes) -> str:
    return binascii.b2a_uu(chunk, backtick=True).decode().translate(TO_XX)

xxencode_line(b"Cat")    # '1Eq3o\n'

每次传入 45 个字节,然后在顶部加上 begin 644 name,在底部加上 + 和 end。解码时,用 str.maketrans(XX, UU) 转换,再对每一行调用 binascii.a2b_uu。字节和编码的更多内容见 Python 页面。

常见问题

  • 据说是 xxencode 的文件解码出乱码。 检查完整行的第一个字符。如果是 M,文件是 uuencode 编码的;请使用 uuencode 工具。
  • 某一行解码出的长度不对。 长度字符被改动或丢失了,通常是邮件客户端重新换行造成的。被拆分或合并的行,xxencode 无法恢复。
  • 解码后的文件被截断。 数据块是分几部分发布的。按顺序把它们拼起来,只保留一个 begin 和一个 end,再解码。

常见问题

xxencode 和 uuencode 有什么区别?

只有字母表不同。两者都把 3 个字节写成 4 个字符,每行最多 45 个字节并带一个长度字符,用 begin 和 end 包围。uuencode 使用从反引号和 ! 到 _ 的 ASCII 范围;xxencode 使用 +、-、数字和字母。

怎样判断一个文件是 xxencode 还是 uuencode?

看完整数据行的第一个字符:M 表示 uuencode,h 表示 xxencode,两者都代表 45 个字节。满是 `、# 或 % 等标点的行是 uuencode。

用什么程序解码 xxencode 文件?

UUDeview 两种格式都能处理;在 Debian 和 Ubuntu 上是 uudeview 软件包。GNU sharutils 中的 uudecode 能读取 uuencode 和 Base64,但不能读取 xxencode。

为什么 xxencode 文件以一行 + 结尾?

+ 是 xxencode 中表示 0 的字符,所以只有 + 的一行是长度为零的数据行。它的作用与 uuencode 中 end 之前那行单独的反引号相同。