一、问题描述
在Ubuntu(默认使用“UTF-8”编码方案)下制作ZIP压缩文件,“tar.gz”压缩文件或者“tar”打包文件,待加入文件的文件名中包含有中文字符,然后在Windows(默认使用“GBK”编码方案)下解压/解打包前述得到的ZIP压缩文件,“tar.gz”压缩文件或者“tar”打包文件,最后发现本应正常显示的包含有中文字符的文件名显示乱码。
比如Ubuntu下有一个“a”目录文件,其下有一个名为“你好吗.txt”的文件,目录结构如图1所示。
图1
执行tar -czvf a.tar.gz a
命令,得到一个名为“a.tar.gz”的压缩文件,将其复制到Windows下,使用WinRAR软件进行解压,出现如图2所示的显示结果,即文件名显示乱码。
图2
执行tar -cvf a.tar a
命令,得到一个名为“a.tar”的打包文件,将其复制到Windows下,使用WinRAR软件进行解打包,出现如图3所示的显示结果,即文件名显示乱码。
图3
二、原理分析
制作压缩文件/打包文件时,编码“加入文件文件名”所使用的编码方案并未被记录,因而后续解压/解打包时,当解码文件名时所使用的编码方案不一致时,就会产生乱码。
三、解决方案
RAR压缩文件格式或者7Z压缩文件格式会记录压缩文件时编码“加入文件文件名”所使用的编码方案,因此为了避免跨操作系统解压压缩文件/解打包打包文件时可能产生的乱码问题,尽可能使用RAR压缩文件格式或者7Z压缩文件格式。
四、其他
最新的ZIP文件创建工具在创建ZIP文件时,会记录编码“加入文件文件名”所使用的编码方案。