Linux 上用 tar czf 打的包,Windows 用 7-Zip 解开,三个文件里有两个名字变成 䏿–‡.txt 这种,内容正常,只有名字坏了。第一次遇到会往复杂处想,其实漏掉的多是个小前提。
tar --format=posix -czf dist.tar.gz dist/ 7z l dist.tar.gz unzip -O UTF-8 dist.zip
tar 本身不记录文件名编码,Linux 写进去的是 UTF-8 字节,Windows 解压工具按本地代码页 CP936 解释,字节序列就被重新拼成乱码。这一点先确认清楚,后面就不用反复试。
「tar 中文文件名」相关的验证我通常做两遍,改完一次、隔天再看一次,确认不是临时生效。把这次用到的命令存进笔记,比记住结论有用,换个环境还能照着走。
改完隔一天再看一次,当场正常不代表能稳住。测试环境和线上的差别,往往就在版本号和那几行被忽略的配置上。
线上出问题先对时间点,跟发布、备份、任务执行的时刻排一排,能省掉一半功夫。
具体做法是,打包时加 --format=posix 并确认工具按 UTF-8 读;Windows 端换支持 UTF-8 的解压工具;跨平台分发改用 zip 并显式指定 UTF-8 标志;文件名尽量用 ASCII 加编号规避。
改完照着核一遍,解压后文件名和原文件一致 中文能正常显示和打开。
