广民广民
工具实现揭秘转换工具

ZIP 解压是怎么实现的

浏览器解压 ZIP——fflate 反向解码与「中文文件名不乱码」的坑

TL;DR:ZIP 解压在浏览器里直接解开你选的 ZIP 包(≤20MB、≤500 个条目、解压后总计 ≤200MB),支持逐个下载或全部打包。中文文件名不乱码是特意处理过的点——这是绝大多数在线解压工具的翻车现场。

⏱️ 30 秒上手

  1. 打开 tools.guangmin.top/tools/zip_extract;
  2. 选择一个 ZIP 文件;
  3. 列表展示全部条目(名称/大小),单条点下载,或全部解压打包下载;
  4. 文件直接回到你的设备,没有任何上传。

🔧 它是怎么实现的

三个实现要点:

  1. 解压 = 打包的镜像:同一个 fflate 库的 unzipSync,把 ZIP 的目录结构与 DEFLATE 压缩块反向解码为字节数组;
  2. 中文文件名的坑(本工具的核心价值):ZIP 格式对文件名编码的规定出了名的混乱——Windows 资源管理器压的中文 ZIP 常用 GBK 编码且不写 UTF-8 标志位,很多解压器一律按 UTF-8 解,出来就是「锟斤拷」式乱码。本工具先看 ZIP 头部的语言标志位,没有标志时按 UTF-8 解、解出非法序列再回退 GBK——两边压缩包都正常显示;
  3. 上限即护栏:500 条目 / 解压后 200MB 的限制不是拍脑袋——浏览器内存有限,恶意「压缩炸弹」(小 ZIP 解出超大内容)需要硬护栏,超限直接拒绝而不是解到一半崩溃。

📏 边界与限制

项值说明
ZIP 体积≤20MB—
条目数≤500防压缩炸弹
解压后总计≤200MB内存护栏
加密 ZIP不支持密码解密需要额外库,暂无此需求

🔗 延伸阅读