跳到主内容
UniKit

Deflate / Gzip 压缩解压

在浏览器里压缩与解压数据:原始 Deflate(RFC 1951)、zlib(RFC 1950)与 gzip(RFC 1952)三种格式,输出与 zlib / gzip 工具完全兼容。

浏览器本地运行所有计算都在你的浏览器里完成,数据不会离开本机。

三种格式互相兼容:Deflate 对应 zlib.deflateRaw / inflateRaw,Zlib 对应 zlib.deflate / inflate,Gzip 对应 zlib.gzip / gunzip。gzip 头里的修改时间固定为 0,因此输出可复现。

结果

这个工具能做什么

  • 手工验证压缩数据:把 gzip / zlib / 原始 Deflate 的十六进制或 Base64 粘进来解压,看看里面到底是什么内容。
  • 准备测试数据:把一段文本压成 gzip 的 Base64,直接放进 HTTP 响应头或 mock 接口里。
  • 排查「解压报错」:三种格式(原始 Deflate、zlib、gzip)逐个试,很快就能确定数据到底是哪一种。
  • 估算压缩收益:工具会显示输入输出长度与压缩率,方便判断某段内容值不值得再压一层。

示例

输入

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.(格式 Gzip,输出编码 Base64)

输出

H4sIAAAAAAAAAwvJSFUoLM1MzlZIKsovz1NIy69QyCrNLShWyC9LLVIoAUrnJFZVKqTkp+sp0EwxAAYoahGGAAAA

原始文本 134 字节,压缩后 66 字节,压缩率约 50.7%;gzip 头里的 mtime 固定为 0,所以同样的输入每次都会得到完全相同的输出。

常见问题

三种格式有什么区别?

Deflate(RFC 1951)是裸压缩流,没有头也没有校验;zlib(RFC 1950)在它外面加了 2 字节头和 4 字节 Adler-32 校验;gzip(RFC 1952)加的是 10 字节头和 CRC32。选错格式解压会直接报「无法按所选格式解压」。

和命令行 gzip / zlib 工具兼容吗?

兼容。Deflate 对应 zlib.deflateRaw / inflateRaw,Zlib 对应 zlib.deflate / inflate,Gzip 对应 zlib.gzip / gunzip,浏览器里的 fflate 实现与它们字节级一致,可以互解。

解压结果不是文本怎么办?

说明原始数据是二进制(图片、protobuf、压缩包等)。把输出编码切到 Hex 或 Base64 就能看到字节流;强行按 UTF-8 解码失败时工具会提示「不是合法的 UTF-8 文本」。

为什么压缩后反而变大了?

很正常。gzip 光头部就有 10 字节,加上 Deflate 块头,短文本压缩后通常比原文长,压缩率会显示成负数。数据量越大、重复越多,压缩收益才越明显。

数据会上传到服务器吗?

不会。压缩、解压和编解码全部在浏览器里完成,页面不发任何网络请求,断网也能用。

关键词:deflategzipzlib压缩解压compressdecompressinflate压缩率rfc 1951rfc 1952

同类工具