多功能解压工具unar和lsar——zip解压乱码问题的一种解决方案

问题

前两天深为.zip压缩包乱码问题所困。

众所周知,Windows系统由于其复杂而沉重的历史包袱,直到现在也还在使用代码页提供多语言字符集支持。其中简中的GBK在Code page 936,而GB18030在Code page 54936。
于是,如果在Windows中打.zip压缩包时不指定使用UTF-8编码,得到的压缩包中文件名便是GBK的。在Windows中压缩解压当然没有问题,但是……

当这个压缩包传到一个使用KDE桌面环境的Linux系统中,使用Ark打开它,一阵乱码便会扑面而来,令人头皮发麻。作为双系统用户当然可以切到Windows解压了再传回来,可平时干活都是在Linux,把系统切来切去真的很不方便。

弯路

此时搜索网络,大面积的答案都是说“用unzip -O选项指定编码”。不过这个-O选项其实是打补丁获得的,在写作本文时Tumbleweed官方仓库中的unzip不包含-O选项,也没有添加这个选项的补丁软件包。另一种方案是先解压而后用convmv一个一个改(用shell脚本一个一个改也是一个一个改)文件名和目录名……不够优雅。

解决

偶然间在openSUSE中文论坛的一篇帖子,了解到了unar解压工具,可解压多种格式的压缩文件。此外,最重要的(也是本文最关心的)功能,它能自动识别文件名的编码并解压;如果自动识别失效,还可以用-e参数指定编码。详细的用法可以使用man unar查看;另有lsar工具,可不解压查看压缩包的内容。

在openSUSE Tumbleweed中可以使用sudo zypper in unar安装unarlsar。笔者使用自动检测功能解压了几个GBK编码的压缩包及几个Shift-JIS编码的压缩包,乱码问题解决得相当好。

*说到这,那就再骂一骂难绷的代码页吧(笑