在 CentOS 下使用 extract(或解压工具)出现中文乱码,通常不是 extract 本身的问题,而是压缩包内文件名的编码与系统当前语言环境不一致导致的。
下面分情况说明原因和解决办法。
例如:
LANG=C
或
LANG=en_US.UTF-8
对中文支持不完整
unzipextract(如 extract(atool))7ztarunzip 解 Windows 压缩包(最典型)unzip test.zip
→ 文件名变成 ????.txt 或乱码
unzip -O GBK test.zip
如果系统 unzip 不支持 -O(CentOS 常见):
# 安装支持 -O 的 unzip
yum install -y unzip
# 若仍不行,用 7z
7za x test.zip
7z 通常会自动识别编码,若仍乱码:
7za x -mcp=936 test.zip
(936 = GBK)
查看当前语言:
locale
如果不是:
LANG=zh_CN.UTF-8
可临时设置:
export LANG=zh_CN.UTF-8
永久设置:
localectl set-locale LANG=zh_CN.UTF-8
并确保已安装中文包:
yum groupinstall -y "Chinese Support"
tar xf test.tar
可尝试:
tar xf test.tar --force-local
或从 Windows 打的 tar 通常用 GBK:
convmv -f GBK -t UTF-8 --notest *
7z 或 unzip -O GBKlocaleconvmv 转换文件名CentOS 解压中文乱码,99% 是因为 Windows 用 GBK 压缩,而 CentOS 用 UTF-8 解压。
如果你能告诉我:
extract / unzip / 7z)我可以给你精确命令。