文档首页> 常见问题> 中文文件名乱码

中文文件名乱码

发布时间:2026-10-07 14:25        更新时间:2026-10-08 12:13
从 Windows 机器打包上传到 Linux,解压出来满屏问号或方块,这是文件名编码不一致造成的:Windows 常用 GBK 系编码,Linux 标准是 UTF-8。 ## 乱码的机制 文件名在文件系统里就是一串字节。打包时按 GBK 编码写入,Linux 按 UTF-8 去解读,字节对不上字符,就成了问号、方块或奇怪符号。日文环境的 Shift-JIS、韩文的 EUC-KR 同理,思路一致,只是源编码不同。 动手前先排除显示层干扰:FTP 工具列表乱码可能只是客户端编码没设对,把传输工具字符集改成 UTF-8 再刷新,不少"乱码"当场消失,文件名本身是好的。确认真实编码可以用 convmv 做一次演练(不带 --notest 时只预览不改动): convmv -f GBK -t UTF-8 /data/uploads 输出会列出哪些文件名会被转换,能转出正常汉字就说明原名是 GBK。注意乱码只影响文件名,文件内容本身不受影响,转回正确编码即可恢复。 ## 已有文件批量转换 convmv 是专门的文件名编码转换工具,CentOS 与 Ubuntu 都有现成的包,yum install convmv 或 apt install convmv。确认演练输出无误后,加参数真正执行: convmv -f GBK -t UTF-8 -r --notest /data/uploads -r 表示递归处理子目录。源编码方向别搞反:来自繁体环境的文件用 -f BIG5,方向错了输出照样是乱码。转完 ls 抽查几个文件,名字恢复正常即可;抽查别只看一屏,ls -R 翻一遍所有子目录,确认没有漏转的角落,再交回业务使用。操作前把目录整体备份一份,转换虽然可逆,多一层保障总没错。 ## 打包环节提前预防 更省事的做法是从源头避免:Windows 侧用支持 UTF-8 文件名的方式打包,选系统自带压缩或勾选 UTF-8 选项的工具,比事后转换省心。解压 zip 时指定来源编码,新版 unzip 支持: unzip -O GBK package.zip tar 本身不转码、按原始字节保存文件名,Linux 之间互传没有编码问题,跨系统时才需要留意。顺手确认系统 locale 为 UTF-8(locale 命令查看),SSH 终端编码也设成 UTF-8,三层编码一致,乱码自然绝迹。约定比修复更重要:团队内部统一"传输一律 UTF-8",乱码从根上就没了土壤。