3
25
2010
22

Linux 下 zip 文件名乱码解决

今天同学向QQ群邮箱里上传文件用了 zip 格式。于是乱码问题再次摆在了面前。

rar 格式和 7z 格式是我所仅知道的两种支持 UTF-8 格式的压缩文件格式。本来平时大家都喜欢用 rar 格式的,不知道为什么这次得到课件的同学却使用了 zip 格式。以前 zip 是支持指定编码解压的,但不知什么时候升级了后就没有这个选项了。于是尝试使用我曾经写过的gbkunzip这个 Python 脚本来解压,却出错了,说不能用 latin1 解码某个字符。

晕啊!当初只为了一时之需没好好写,当时测试成功了现在却不行了。尝试着改了几下,无果,于是去看zipfile的代码,才知道转码时应该用cp437编码来着。改正后,在为文件更名时另一个错误跳出来:OSError!查了 Python 手册,应该os.rename()不支持对目录更名。

真是麻烦啊。本来我是把文件解压出来再改名来着。现在我有点烦了,决定从源头入手,把zipfile拿来自己修改,把所有的 utf8 都改成了 gb18030,然后解压那个文件,成功!当初写那个脚本时我怎么没想到这样做呢?

不过,这次解压是成功,还不知道以后会不会再出什么问题。以后遇到问题再完善吧。

2013年5月21日更新:添加对加密 zip 文档的支持。


脚本在此。Arch Linux 用户可从 AUR 安装。

Category: Linux | Tags: linux 乱码 zip

Mastodon | Theme: Aeros 2.0 by TheBuckmaker.com