工具实现揭秘转换工具
ZIP 解压是怎么实现的
浏览器解压 ZIP——fflate 反向解码与「中文文件名不乱码」的坑
TL;DR:ZIP 解压在浏览器里直接解开你选的 ZIP 包(≤20MB、≤500 个条目、解压后总计 ≤200MB),支持逐个下载或全部打包。中文文件名不乱码是特意处理过的点——这是绝大多数在线解压工具的翻车现场。
⏱️ 30 秒上手
- 打开 tools.guangmin.top/tools/zip_extract;
- 选择一个 ZIP 文件;
- 列表展示全部条目(名称/大小),单条点下载,或全部解压打包下载;
- 文件直接回到你的设备,没有任何上传。
🔧 它是怎么实现的
三个实现要点:
- 解压 = 打包的镜像:同一个 fflate 库的
unzipSync,把 ZIP 的目录结构与 DEFLATE 压缩块反向解码为字节数组; - 中文文件名的坑(本工具的核心价值):ZIP 格式对文件名编码的规定出了名的混乱——Windows 资源管理器压的中文 ZIP 常用 GBK 编码且不写 UTF-8 标志位,很多解压器一律按 UTF-8 解,出来就是「锟斤拷」式乱码。本工具先看 ZIP 头部的语言标志位,没有标志时按 UTF-8 解、解出非法序列再回退 GBK——两边压缩包都正常显示;
- 上限即护栏:500 条目 / 解压后 200MB 的限制不是拍脑袋——浏览器内存有限,恶意「压缩炸弹」(小 ZIP 解出超大内容)需要硬护栏,超限直接拒绝而不是解到一半崩溃。
📏 边界与限制
| 项 | 值 | 说明 |
|---|---|---|
| ZIP 体积 | ≤20MB | — |
| 条目数 | ≤500 | 防压缩炸弹 |
| 解压后总计 | ≤200MB | 内存护栏 |
| 加密 ZIP | 不支持 | 密码解密需要额外库,暂无此需求 |