电脑必备
部署包解压后中文文件名变问号,我翻出打包机的系统区域设置才搞定
79 0 13
上周发版遇到个邪门事:同一个部署包,在我 Win11 开发机解压正常,到 CentOS 测试机就一堆 ??? 文件名,日志目录直接找不着。
现象
- 包是 CI 上打的 zip,文件名含中文
- 本地用 Win解压缩 6.8 解压正常,用 7-Zip 24.09 也正常
- scp 到 Linux 用 unzip 6.0 解压,中文全变问号
排查过程
- 先怀疑 unzip 版本,换 7z x 在 Linux 上试,同样乱码,排除解压端
- 用
zipinfo -v看包内条目,发现文件名没带 UTF-8 标志位 - 再查打包机(Windows Server 2019)的区域设置:非 Unicode 程序的语言是「中文(简体,中国)」,但编码用的是 GBK
- 结论:zip 按本地代码页打包,Linux 端默认 UTF-8 解,两边对不上
解决办法(按推荐顺序)
- 打包时指定编码:7-Zip 命令行加
-mcu=on,强制 UTF-8,最稳 - 改打包机区域设置里「Beta: 使用 Unicode UTF-8 提供全球语言支持」勾上,但会影响老软件,慎用
- 解压端临时救急:
unzip -O CP936,需新版 unzip 支持
实测数据
- 同一批 200 个中文文件,
-mcu=on打包后 Linux 解压 0 乱码 - 不勾选时 100% 乱码
- Win解压缩 图形界面解压正常,但它的命令行参数里我没找到指定编码的开关,这点还是 7-Zip 顺手
踩坑提醒
- 别在 CI 里用
zip -r直接打包中文名,默认也是本地编码 - 自解压包更坑,外壳程序会继承系统代码页,换台机器就崩
- 发外网前先用
file和zipinfo验一遍,别等客户截图来问
你们打包时都是怎么统一编码的?有没有遇到更隐蔽的坑,比如文件名长度限制或者特殊符号被吞?
登录后可以为帖子点赞,但本帖内容对所有人开放阅读。
