本质是编码不匹配:Windows用GBK编码存文件名,Linux unzip默认按UTF-8解析;解决关键是让unzip用正确编码读取,常用方法为unzip -O CP936 archive.zip,或设环境变量UNZIP="-O CP936"实现全局生效。

Linux 中解压 Windows 打包的 zip 文件时出现中文文件名乱码,本质是编码不匹配:Windows 默认用 GBK(CP936)编码存储文件名,而 Linux 的 unzip 默认按 UTF-8 解析。解决的关键不是“转换”,而是**让 unzip 用正确的编码去读取和生成文件名**。
直接指定编码解压(最常用)
大多数现代发行版(Ubuntu 22.04+、CentOS 8+、Debian 12+)自带的 unzip 已支持 -O 参数。只需在解压时明确告诉它用 GBK 编码:
-
unzip -O CP936 archive.zip—— 适用于简体中文 Windows 打包的文件 -
unzip -O GBK archive.zip—— 效果等同 CP936,更直观 -
unzip -O GB18030 archive.zip—— 兼容性更强,覆盖更多汉字
注意:-O 必须紧接在 unzip 后、压缩包路径前;如果提示 unrecognized option '-O',说明你的 unzip 版本太旧或未打补丁(见下一条)。
确认并升级 unzip(兼容性兜底)
某些系统(如 Alpine、老旧 CentOS 7 或 Manjaro)默认 unzip 不含 -O 支持。可按需处理:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 先检查是否支持:
unzip --help | grep -i '\-O'或unzip -h | grep -A1 'charset' - 若不支持,推荐安装增强版:
• Ubuntu/Debian:sudo apt install unzip-iconv(提供unzip-iconv命令)
• Arch/Manjaro:yay -S unzip-iconv
• 或手动编译带 iconv 补丁的 unzip(需源码+libiconv,适合高级用户)
设置全局默认编码(一劳永逸)
不想每次敲 -O CP936?可通过环境变量让 unzip 和 zipinfo 默认使用 GBK:
- 编辑
/etc/environment(系统级)或~/.profile(用户级) - 添加两行:
ZIPINFO="-O CP936"
保存后重新登录终端,之后所有 unzip xxx.zip 和图形界面归档管理器(如 File Roller)都会自动按 GBK 解析中文名。
替代方案:用 unar 或 7z(无需编码干预)
如果 unzip 方案受限,可换更智能的解压工具:
-
unar archive.zip—— 自动检测编码,对中文 zip 兼容性极好,安装:sudo apt install unar(Debian/Ubuntu)或sudo yum install unar(CentOS) -
7z x archive.zip—— 7-Zip 在 Linux 下通常能正确识别 Windows 中文名,且无需额外参数

















