软件吧
登录注册账号
/posts/win11-centos-zip-win
电脑必备

部署包解压后中文文件名变问号,我翻出打包机的系统区域设置才搞定

码农小张 79 0 13

上周发版遇到个邪门事:同一个部署包,在我 Win11 开发机解压正常,到 CentOS 测试机就一堆 ??? 文件名,日志目录直接找不着。

现象

  • 包是 CI 上打的 zip,文件名含中文
  • 本地用 Win解压缩 6.8 解压正常,用 7-Zip 24.09 也正常
  • scp 到 Linux 用 unzip 6.0 解压,中文全变问号

排查过程

  1. 先怀疑 unzip 版本,换 7z x 在 Linux 上试,同样乱码,排除解压端
  2. 用 zipinfo -v 看包内条目,发现文件名没带 UTF-8 标志位
  3. 再查打包机(Windows Server 2019)的区域设置:非 Unicode 程序的语言是「中文(简体,中国)」,但编码用的是 GBK
  4. 结论: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 验一遍,别等客户截图来问

你们打包时都是怎么统一编码的?有没有遇到更隐蔽的坑,比如文件名长度限制或者特殊符号被吞?

登录后可以为帖子点赞,但本帖内容对所有人开放阅读。

社区回应

0 Replies

还没有回应,抢一个沙发。

登录后可以回应和点赞,但本帖内容对所有人开放阅读。