问题描述
Linux系统的zip压缩包,如果是来自Windows系统,极大可能出现解压后带中文的文件名乱码的问题,而这一问题的起因则是Windows系统不像Linux系统,默认的字符集为全球统一的UTF-8,而是根据系统时区设置当地的字符集格式(所以并不止中文乱码,其他非英文都可能出现乱码)。
解决方法(误)
安装unzip-natspec
。
名字:
unzip-natspec
描述: 使用AltLinux的libnatspec补丁程序为非拉丁文件名创建PKZIP兼容的.zip文件的unzip的补丁程序。
但是安装后实测无效,解压出来的文件依旧乱码(或许国外有效)。
解决方法
unzip
软件包的unzip
命令提供了-O
参数(以及-I
参数),可以指定编码。
unzip的帮助文档
-O CHARSET 为DOS,Windows和OS / 2归档文件指定字符编码
-I CHARSET 为UNIX和其他归档文件指定字符编码
因此,使用如下命令解压中文乱码的zip文件即可消除乱码
unzip -O gb18030 example.zip
关于中文字符集:
中国国家标准总局发布的中文字符集有gb2312、gbk与gb18030三种,其中:
- gb2312发布于1980年,收录汉字6763个(不包含一些古文生僻字);
- gbk发布于1995年,收录汉字21003个;
- gb18030现行版本发布于2005年,收录汉字70244个。
参考资料来自百度百科
图形化界面的解决方案(KDE)
推荐farseerfc大神的Dolphin插件
步骤如下:
编写一个unzip.desktop文件:
[Desktop Entry]
Type=Service
ServiceTypes=KonqPopupMenu/Plugin
MimeType=application/zip;application/x-zip-compressed;application/octet-stream;
Actions=unzipsjis;unzipgbk;
X-KDE-Submenu=Unzip as
[Desktop Action unzipsjis]
Name=Unzip here shift-jis
Icon=application-zip
Exec="unzip" "-O" "sjis" "%U"
[Desktop Action unzipgbk]
Name=Unzip here GBK
Icon=application-zip
Exec="unzip" "-O" "gb18030" "%U"
将写好的unzip.desktop文件放到~/.local/share/kservices5/ServiceMenus
目录下。
之后右键zip文件,即可选择 Unzip as 子菜单中的 Unzip here GBK 动作,解压中文编码的zip文件。
注意事项
ArchLinux的unzip(version>=6.0-13)
软件包的unzip
命令取消了-O
和-I
参数,推荐安装archlinuxcn源的unzip-iconv
软件包(保留了-O
与-I
参数),或者安装Debian系Linux的unzip
的deb软件包(使用debtap
转换为Arch包)。