0%

跨操作系统解压压缩文件或者解打包打包文件后内部文件名乱码问题

一、问题描述

在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文件时,会记录编码“加入文件文件名”所使用的编码方案。

您的支持将鼓励我继续分享!