去那个 aur 的页面,下载 unzip60.tar.gz 和 unzip-iconv.tar.gz,解压两个压缩包于同一个目录,进入 unzip60/,patch -p 1 -i …/unzip-iconv/unzip60-alt-iconv-utf8.patch,然后 make -f unix/Makefile generic,最后 sudo make install 安装。
如我前面所说的修改 /etc/environment,注销重新登陆,如果还是不行,再改~/.xinitrc,反正我是一股脑全改了
编译结果如图所示
打了补丁编译后 export 一下环境变量后 Ark 用起来没问题的,另外 home:ykoba 里有个 unzip-ja,不知道能不能解决中文的问题,我没试过
我也是那么编译的,再麻烦楼上的朋友测试一下:
在 ZIPINFO=-O CP936 设置的情况下,用 zipinfo -l 4455.zip 结果如何?
如果结果不正确,那么你的 Ark 可能调用了其他后端?
如果结果正确,那需要进一步研究,比如 isprint(3) 对 0 到 255 的结果如何(这是 unzip 在列文件列表用来判断是否用? 替代字符的函数)。
现在编译出来的 unzip 确实有问题,我一直都是用以前编译的,装了 12.3 后直接 make install,没有重新编译,也不知道以前是怎么编译的,现在我只能把以前编译的打包传上来,以前好象是在 12.2 下编译的,你可以看一下。
为什么现在编译的不行,我想了好久,还是百思不得其解。
unzip60.tar.xz (1000 KB)
我曾经用 python 自己写了一个解压缩的软件,调用 python 里面的 zip 库实现。解决乱码的办法是,取出文件名后,我先将文件名串设置编码为 GBK,然后转成 UTF 的串,再用这个串作为文件名来创建解压文件。
我以为 libzip 也可以这么做,还准备用 c++ 来写一个 unzip 的程序的。
这个东西是基于 zlib 的,如果真的要写一个 unzip 的话,可以直接用 zlib,不过那到最底层了,libzip 好像是封装好了
解压以后使用"convmv -f gbk -t utf8 -r --notest *"。
这个东西是基于 zlib 的,如果真的要写一个 unzip 的话,可以直接用 zlib,不过那到最底层了,libzip 好像是封装好了
zypper se zip 发现貌似好多 zip 的库,什么 libzip,libzip2,libzzip-0-13,libzipios0,quazip,而且 quazip 还是 qt 的,可惜就是没有能很好的支持中文的 gui 压缩软件
后来查了一下,确实是 isprint 的问题,好像要禁用 isprint 才能正常显示中文文件名。现在我打包了个含 libnatspec 补丁的 unzip,应该能解决 ark 和 xarchiver 的中文显示问题,欢迎试用,这是 obs 页面: build.opensuse.org/package/show?package=unzip&project=home%3Ayjcoshc
openSUSE 的解决方案更快更好更强。
之前用不了是因为一个小 bug。
解决方案:
sudo zypper in rcc-runtime
搞定。
马叔的四书五经测试无误。
恭喜苏苏终于弄好了
rcc-runtime 为啥能解决问题表示不解……
俺想到了一个新思路,通过 Python 的 zipfile 模块将非 UTF-8 的 zip 文件转换成支持 UTF-8 的 zip 文件,转换得到的文件跨平台可用,也可以在 Google Drive 中直接预览(目前就测试了之前那个 4455.zip)。
代码(Python 2): github.com/maxiaojun/zip-fix/blob/master/cli.py
用例(目前完全没有错误处理,请小心使用):
python cli.py 4455.zip 4455_fix.zip gbk
局限性:Python 的 zipfile 模块只支持 Stored(无压缩)和 Deflate 两种压缩方法(compression method),其他压缩方法无解,参见: en.wikipedia.org/wiki/Zip_(file_format)#Compression_methods
跨平台注意事项:
虽然三大 OS 都原生支持 zip,但是对 zip 的 UTF-8 的支持好像又都是坏的……需要第三方软件才能正确支持 UTF-8……
- Linux:请安装 p7zip
- Mac:请安装 The Unarchiver
- Windows:请安装 7-zip 或者 PeaZip(WinRAR 和 WinZip 也能正确支持 UTF-8)
我们用 librcc 的 zip 补丁。rcc-runtime 是 librcc 的转换规则。
Sent from my Galaxy Note 2 using Tapatalk 4 Beta
一点也不新,请自行搜索 gbkunzip。而且 UTF-8 编码的 zip 归案文件名并不是跨平台的,你也说了需要特定的软件不是?
我就是看了你那个 gbkunzip 才写的……
你那个把官方的 zipfile 模块自己复制一份再 hack,其实直接调用 zipfile 模块(几行代码)就能解决问题……而且你那个顾名思义,把来源编码锁死在了 GB 系列,我这个能转换任何 Python 支持的编码( docs.python.org/2/library/codecs.html#standard-encodings )……最主要的是,你那个是为了解压,我这个是为了转换。
需要特定的软件?至少我没见过有人用 Windows 连个第三方压缩软件都不装,朝内绝大部分 WinRAR,朝外有时候就用 7-zip(Linux 和 Mac 样本数不够),UTF-8 编码进 zip 标准很多年了已经。现在还有人在用 IE6,就不让搞 HTML5 了吗?
Linux 和 Mac 用户,就算山穷水尽,还有
python -m zipfile
可以用啊!
再补充一下,openSUSE,Debian testing/sid,Ubuntu saucy 的 unzip 都打了补丁可以正确列出 UTF-8 Zip 压缩包的文件内容了(解压一直都行)。其他发行版的用户检查下自己的发行版哦~
openSUSE 加了个 unzip-dont_call_isprint.patch
Debian/Ubutnu 是在编译时加了 -DNO_WORKING_ISPRINT
因为我不想写个新的 zip 文件。如你所说,我只是为了解压而已。反正跨平台的压缩文件格式我推荐 7z。
关于 zip 的 UTF-8 支持,我刚看过了,是通过一个标志位来指定的。也就是说,你的脚本是把旧的非 UTF-8 编码的文件名转成了新的 UTF-8 编码的格式。要是再加上一些错误处理就更好了。
其实我觉得,opensuse 的 rcc 版 unzip 很不错嘛。
马叔多来我们论坛讨论技术嘛,氛围嗷嗷好,toy 评论栏没啥好留恋的… 自从当初弄那个什么 QQ 帐号 Single Sign-In 的渣评论栏之后,side effects 是脑残越来越多了,现在跟 CB 一样评论栏完全不能看了。
Sent from my Galaxy Note 2 using Tapatalk 4 Beta