服务公告

服务公告 > 技术教程 > unzip 中文文件名乱码的两种解法

unzip 中文文件名乱码的两种解法

发布时间:2026-10-12 14:19
## 症状与背景 在 Windows 上打包的 zip 压缩包传到 Linux 服务器,解压后中文文件名全部变成乱码符号,文件内容倒是完好。根因出在编码约定:zip 格式历史悠久,文件名字段的编码没有强制标识,Windows 侧压缩工具默认用 GBK 系编码写入,Linux 侧解压工具默认按 UTF-8 解释,两边各说各话,名字就成了天书。知道背景,解法就是让解压侧按打包侧的编码来读。 ## 解法一:unzip 指定编码 unzip 的 -O 参数直接指定压缩包内文件名的字符集: ```bash unzip -O GBK 压缩包.zip -d 解压目录/ ``` 大多数场景 GBK 就能对上,少数老包可以试 GB18030。这个参数在部分发行版的自带 unzip 里默认未启用,是编译选项决定的,执行时如果提示参数不存在,别硬磕,换下一条路。解压成功后立即 ls 确认文件名正常,再开始搬动文件,免得乱码名混进业务目录。 ## 解法二:用 7z 中转 发行版仓库里的 p7zip 对 Windows 打包兼容性更好,配合环境变量指定编码: ```bash 7z x 压缩包.zip -o解压目录 ``` 部分场景下 7z 能自动识别编码直接解出正常文件名;若仍不对,安装 unar 这类按内容智能探测编码的工具,它对历史包的识别成功率更高,对非技术同事传来的杂牌压缩包尤其省心。这两条路都不行时,最简单的办法是请打包的人在 Windows 侧改用压缩为 UTF-8 的工具重新打包,从源头统一编码。 ## 预防建议 团队协作固定压缩工具与编码,比每次解压碰运气强。自己打给 Windows 用户的包,尽量不嵌套中文目录名;必须中文时用 zip 之外支持编码声明的格式,或双端都装同一套工具。服务器侧收包后养成先解到临时目录核对文件名的习惯,确认无误再挪进业务目录。顺云云服务器上长期跑文件交接流程的话,把常用解压命令写成脚本带编码参数,同事复制即用,乱码工单会少一大半。