编码加密 · Base 系列

Base85/Ascii85/Z85

Adobe/git/ZeroMQ 风格

本地处理 · 不上传 免费 · 无需登录 无次数限制 累计 61 次使用
文本 ↔ Base85 · UTF-8 · 全本地
变体
文本 plain · UTF-8
0 字符 · 0 字节
Base85 ascii85
0 字符
编辑「文本」→ 实时编码 Base85;编辑「Base85」→ 实时解码 文本
示例:点 Man → 9jqo (Ascii85) · 全宝 (Adobe 包裹) · Hello World! (Z85)
就绪 · 输入文本或 Base85 即时互转
第一节

关于本工具

About

把二进制数据塞进文本协议时,Base85 是比 Base64 更紧凑的选择——每 4 字节编码为 5 个 ASCII 字符,编码膨胀率仅 25%。这个工具同时支持 Adobe(Ascii85)、git 和 ZeroMQ(Z85)三种变体,输入一段数据就能看到三种编码结果,方便在 PostScript 文件、git 补丁或 ZMQ 消息中直接使用。所有编码解码都在浏览器本地完成,数据不上传服务器。

使用场景

Git补丁传输

项目在离线内网,同事通过邮件传一个Git补丁文件。邮件服务器过滤附件中的二进制内容,补丁被截断。用本工具将补丁文件编码为纯ASCII文本,直接粘贴在邮件正文中发送。接收方复制文本解码还原,补丁完整可用,绕过附件过滤。

Adobe脚本嵌入

为Photoshop写了一个JSX脚本,需要嵌入到动作或扩展面板中。脚本文件包含中文字符和特殊符号,直接嵌入会导致解析错误。用本工具将脚本编码为Ascii85字符串,在XML/JSON配置文件中直接引用。脚本加载时解码执行,避免编码冲突。

ZeroMQ消息调试

用ZeroMQ搭建微服务,消息体包含二进制序列化数据(如Protocol Buffers)。调试时日志只能打印可打印字符,二进制数据变成乱码。用本工具(Z85编码)在发送端编码二进制消息,日志可读;接收端解码后对比原始数据,快速定位序列化错误。

PDF元数据清理

从客户处收到一个PDF,需要提取其中嵌入的字体文件用于网页渲染。字体文件是二进制,直接复制会损坏。用本工具将字体数据编码为ASCII文本,安全粘贴到文本编辑器中,再解码还原为.woff文件。整个过程无需安装任何软件,浏览器内完成。

第二节

使用指南

Getting Started

使用步骤

  1. 1在输入框粘贴或键入待编码的文本(支持 UTF-8 字符),下方实时显示 Base85、Ascii85、Z85 三种编码结果
  2. 2点击「编码」按钮,输出区自动生成编码后的字符串,同时显示字符数变化与编码格式标签
  3. 3如需解码,将编码字符串粘贴至输入框,点击「解码」按钮,输出区还原原始文本,并校验编码格式是否匹配
  4. 4点击输出区任意编码结果旁的「复制」图标,将对应格式的字符串写入剪贴板,底部提示「已复制」

输入输出示例

输入输出说明
Hello World!87cURD_*#TDf5Z常规:ASCII 可打印字符串,验证 Adobe 风格(Ascii85)基本编码,输出不含空格且以 ~> 结尾(此处为简写,实际输出含 ~> 时需注意解码端处理)
\x00\x00\x00\x00!!!!!边界:全零字节(4 字节),Ascii85 会压缩为 5 个感叹号,验证零值特殊处理逻辑
\x00\x00\x00\x00\x00\x00\x00\x00!!!!!!!!!!边界:连续 8 个零字节,验证多组零值拼接时是否按 4 字节分组正确输出
a0a边界:单字节输入,Ascii85 需要补零到 4 字节再编码,验证尾部处理(输出长度固定为 2 字符)
\x01\x02\x03\x040et*2常规:非零小数值字节,验证编码算法(4 字节转 5 字符)的算术正确性
\x7f\x80\xffs8W-!易错:包含最高位为 1 的字节(0x80、0xFF),某些实现可能因有符号整数处理导致错误,验证字节值 >127 时的无符号处理
中文测试Fc%N8Bp%#9Fc%N8Bp%#9易错:多字节 UTF-8 编码(中文),验证工具是否正确处理非 ASCII 字符的原始字节序列(而非 Unicode 码点)
\x00\x00\x00\x01!!!*#边界:仅最后一位非零的 4 字节组,验证编码时高位补零的算术运算(值 = 1,编码为 '!'*3 + '*' + '#')

常见错误对照

1.混淆 Adobe 和 git 风格的编码结果

✗ 错误用 Adobe 风格编码 'test',得到 '~>F*' 后直接用于 git 环境
✓ 修复Adobe 风格:~>F*;git 风格:GX#4;Z85 风格:nm=QZ

Adobe 用 ~ 开头、z 结尾表示压缩块,git 用特定字符集,Z85 用 85 字符集。混用会导致解码失败。

2.Z85 编码输入长度不是 4 的倍数

✗ 错误输入 'hello'(5 字节)直接编码
✓ 修复输入 'hell'(4 字节)或 'hello!'(6 字节)

Z85 要求输入字节数为 4 的倍数,否则无法按 4 字节一组映射为 5 个 Z85 字符。

3.Adobe 风格解码时忽略开头 ~ 符号

✗ 错误解码 '~>F*' 时只传 '>F*'
✓ 修复解码时传入完整字符串 '~>F*'

Adobe 风格用 ~ 标记编码块起始,解码器依赖此符号识别边界,缺失会导致解析失败。

4.Ascii85 解码时包含空白字符

✗ 错误解码 '~>F*' 时传入 '~>F *'(中间有空格)
✓ 修复解码时传入无空格的连续字符串 '~>F*'

Ascii85 规范中空白字符不是有效编码字符,解码器遇到空格会报错或产生错误结果。

5.Z85 编码结果包含小写字母

✗ 错误编码 'test' 得到 'nm=QZ' 后误以为 'nm=qz' 也合法
✓ 修复Z85 字符集只有大写字母、数字和部分符号,小写字母不在其中

Z85 字符集明确排除了小写字母(避免与数字混淆),解码器遇到小写字母会拒绝。

6.Adobe 风格编码后未添加 ~> 和 ~> 标记

✗ 错误编码 'hello' 得到 'BOu!rD' 直接使用
✓ 修复编码结果应为 '~>BOu!rD~>'

Adobe 风格要求编码块以 ~> 开头、~> 结尾,这是解码器识别块边界的必要标记。

第三节

工作原理

How It Works

核心公式

Base85 编码:将 4 字节二进制数据 (32 位) 转换为 5 个 ASCII 字符,每个字符对应 85 进制数的一位。解码:5 个 ASCII 字符还原为 4 字节。

变量说明

  • 4 字节二进制数据32 位无符号整数,范围 0–4294967295
  • 85 进制数每位取值范围 0–84,共 5 位
  • ASCII 字符根据编码风格映射到可打印字符

示例

以 Adobe 风格 (Ascii85) 编码 4 字节 [0x4D, 0x61, 0x6E, 0x20](即字符串 "Man "): 1. 将 4 字节拼为 32 位整数:0x4D616E20 = 1296256544 2. 转换为 85 进制:1296256544 ÷ 85 = 15250076 余 84 → 第 5 位 84 15250076 ÷ 85 = 179412 余 56 → 第 4 位 56 179412 ÷ 85 = 2110 余 62 → 第 3 位 62 2110 ÷ 85 = 24 余 70 → 第 2 位 70 24 ÷ 85 = 0 余 24 → 第 1 位 24 得到 85 进制数 [24, 70, 62, 56, 84] 3. 映射到 ASCII:每个值加 33('!' 的 ASCII 码),得到字符:24+33=57 → '9',70+33=103 → 'g',62+33=95 → '_',56+33=89 → 'Y',84+33=117 → 'u' 编码结果:"9g_Yu" 4. 实际 Ascii85 输出会在两端加 '~' 和 '>',即 "~>9g_Yu"。

原始字节流任意二进制数据分组与查表编码每4字节→5字符查85字符映射表ASCII文本输出~25%体积膨胀复制粘贴ASCII文本输入含校验字符解码与校验每5字符→4字节校验非法字符原始字节流恢复二进制数据下载保存编码流程解码流程
输入数据 本地编码/解码处理 输出结果 用户操作
第五节

常见问题

Q & A
我有一串用 Adobe 风格编码的文本,能用这个工具解码吗?

可以。工具在编码/解码时提供了「Adobe 风格」选项。Adobe 风格(Ascii85)用 ~ 开头、~> 结尾包裹编码内容,且内部会跳过空白字符。直接粘贴含 ~<~ 和 ~> 的完整内容,选择「Ascii85 (Adobe)」模式解码即可。如果只粘贴了中间部分,工具会自动补全包裹符尝试解码,但建议保留完整格式以避免首字节错误。

ZeroMQ 的 Z85 和普通的 Base85 编码结果不一样,这个工具能处理哪种?

工具同时支持 Z85 和两种常见的 Base85(RFC 1924 的 Ascii85、Adobe 的 Ascii85)。Z85 是 ZeroMQ 定义的变体,编码表不同且要求输入长度必须是 4 的倍数,输出的字符串不含换行。如果拿 Z85 编码结果用普通 Ascii85 解码,会得到乱码。操作时需在「编码类型」下拉菜单中明确选择「Z85(ZeroMQ)」,工具会用对应字符表处理。

为什么我用 Base85 编码后,输出的文本里有些字符是 `~` 和 `z`?这正常吗?

正常。这是 Ascii85 编码的压缩规则。当连续四个输入字节都是 0x00(即四个零字节)时,编码会输出单个 `z` 来节省空间;当编码结果以 `~` 开头时,为防止与 Adobe 的包裹符冲突,工具会自动转义为 `~<` 或 `~>` 的特殊序列。如果后续需要人工处理编码结果,注意这些特殊字符不是错误,而是编码标准的一部分。

这个工具能在没有网络的情况下用吗?

可以。工具采用纯前端 JavaScript 实现,所有编码/解码运算都在浏览器本地完成,不会上传任何数据到服务器。页面加载一次后,即使断开网络,只要不关闭浏览器标签页,仍可正常使用。如果希望完全离线使用,可以等页面加载完成后保存整个网页(Ctrl+S),后续双击 HTML 文件即可在无网环境运行。

我有一段用 Git 的 `git diff` 输出的 Base85 编码数据,怎么用这个工具还原?

Git 内部存储二进制文件 diff 时使用的确实是 Base85 编码(类似 Ascii85 但略有差异)。直接复制 Git 输出的编码文本(通常以 `literal <大小>` 开头,后面跟编码数据)粘贴到输入框,选择「Ascii85 (Git)」模式解码。注意 Git 的编码数据中可能包含换行和空格,工具会自动忽略这些空白字符。如果解码后得到乱码,检查是否复制了 Git 的头部元信息(如 `literal` 行),只保留纯编码行即可。

编码出来的字符串特别长,有没有办法让它短一点?

Base85 的编码效率是固定的——每 4 字节输入输出 5 个 ASCII 字符,压缩率约 25%(比 Base64 的 33% 更优)。不同变体(Adobe、Z85、RFC 1924)输出长度完全相同,因为字符表大小一样。无法通过切换模式缩短结果。如果追求更短,考虑用 Base91(压缩率约 22%)或 Base122,但本工具不支持。注意:输入数据本身有冗余(如大量连续零字节)时,Ascii85 的 `z` 压缩规则会让结果略短。

我输入了一串文本点「编码」,结果弹了个错误说「输入长度不是 4 的倍数」,怎么办?

这是 Z85 模式下的硬性约束。Z85 要求输入字节数必须是 4 的倍数,否则无法正确分组编码。解决方法:切换到「Ascii85 (Adobe)」或「Ascii85 (RFC 1924)」模式,这两种模式对输入长度无限制(不足 4 字节时会自动补零填充)。如果必须用 Z85,需在输入末尾补零字节(`\x00`)使总长度对齐 4 的倍数,但解码后记得去除补位。

这个工具跟 Base64 比,有什么场景下必须用 Base85?

Base85 主要优势是编码后字符串更短(同样是 4→5 字节,Base64 是 3→4),在传输带宽敏感的场景中更优。具体场景:1)Git 存储二进制 diff 时用 Base85 减少仓库体积;2)Adobe PDF 中内嵌二进制流(如字体、图片)用 Ascii85 包裹;3)ZeroMQ 的 Z85 用于在 TCP 或 IPC 中传输密钥,因为其字符表不含引号和转义符,方便嵌入文本协议。如果只是普通 URL 或 JSON 传二进制,Base64 更通用。

隐私保证所有计算与处理均在你的浏览器本地完成,输入数据不会上传服务器,也不会保存或共享。

选择 打开 +新窗口 esc关闭