[三星]写一个程序或脚本,解决windows下zip包在linux下解压文件名乱码问题

除了美化之外,还可以来尝试挑战一下任务
回复
头像
oneleaf
论坛管理员
帖子: 10237
注册时间: 2005-03-27 0:06
系统: Ubuntu 12.04
送出感谢: 7 次
接收感谢: 107 次

[三星]写一个程序或脚本,解决windows下zip包在linux下解压文件名乱码问题

#1

帖子 oneleaf » 2011-04-13 20:15

1 任务内容: 写一个程序或脚本,解决windows下zip包在linux下解压文件名乱码问题

2 任务的难度: 三星

3 任务的目的: 掌握字符集和脚本语言

4 任务所涉及的软件: 不限

5 任务将大致消耗的时间: 1-3天

6 任务思路: 转换GBK文件名到UTF-8
头像
oneleaf
论坛管理员
帖子: 10237
注册时间: 2005-03-27 0:06
系统: Ubuntu 12.04
送出感谢: 7 次
接收感谢: 107 次

Re: [三星]写一个程序或脚本,解决windows下zip包在linux下解压文件名乱码问题

#2

帖子 oneleaf » 2011-04-13 20:18

给一个PHP写的解压缩脚本,来源: http://micy.cn/blog/post/118
使用:
将下面的脚本存到自己home目录下的bin里面, 比如放到 ~/bin/punzip,然后 chmod +x ~/bin/punzip,以后就可以比较自由的直接调用 punzip foo.zip 来解压了。

代码: 全选

<?php
/**
 * 解压含有文件名为gbk编码的zip包,到当前目录
 */
if (!extension_loaded('zip')) {
    printf("php zip extension is needed. See http://www.php.net/manual/en/zip.installation.php\n", $argv[0]);
    die;
}
if (!isset($argv[1])) {
    printf("Usage: php %s filename\n\n", $argv[0]);
    die;
}
$f = zip_open($argv[1]);
while ($e = zip_read($f)) {
    $filesize = zip_entry_filesize($e);
    $filename = iconv('GBK', 'UTF-8', zip_entry_name($e));
    if (!$filesize) {
        mkdir($filename); 
        continue;
    } else if (!zip_entry_open($f, $e)) {
        continue;
    }   
    file_put_contents($filename, zip_entry_read($e, $filesize));
    echo "$filesize\t$filename\n"; 
    zip_entry_close($e);
}   
zip_close($f);
继续寻求其他语言开发的代码。
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙
送出感谢: 4 次
接收感谢: 256 次

Re: [三星]写一个程序或脚本,解决windows下zip包在linux下解压文件名乱码问题

#3

帖子 eexpress » 2011-04-13 21:17

gbk都是猜的啊。这是丑陋的方法。没兴趣。
:em04
● 鸣学
头像
oneleaf
论坛管理员
帖子: 10237
注册时间: 2005-03-27 0:06
系统: Ubuntu 12.04
送出感谢: 7 次
接收感谢: 107 次

Re: [三星]写一个程序或脚本,解决windows下zip包在linux下解压文件名乱码问题

#5

帖子 oneleaf » 2011-04-16 15:33

:em01 呵呵,给出Python的版本

代码: 全选

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# file: unzip.py
import zipfile,os,sys

if len(sys.argv)==2:
   fname=sys.argv[1]
else:
   print "Usage: python %s filename\n\n" % sys.argv[0]
   sys.exit()

if (not os.path.exists(fname)) or (not zipfile.is_zipfile(fname)):
   print fname,"is not zipfile or not exists"
   sys.exit() 

f=zipfile.ZipFile(fname)
for finfo in f.infolist():
    savename=unicode(finfo.filename,'GBK')
    if os.path.exists(savename):continue
    if finfo.file_size==0:
       os.mkdir(savename)
    else:
       of=open(savename,'w')
       of.write(f.read(finfo))
       of.close()
    print savename
f.close()
头像
leeaman
帖子: 30702
注册时间: 2007-02-02 18:14
系统: debian sid
送出感谢: 1 次
接收感谢: 23 次

Re: [三星]写一个程序或脚本,解决windows下zip包在linux下解压文件名乱码问题

#6

帖子 leeaman » 2011-04-16 15:36

难得一见,呵呵,不懂纯支持~~~
醉了星星,醉月亮●●●●●The Long Way To Go(*^_^*)
头像
orangejuice
帖子: 112
注册时间: 2010-07-16 10:26
送出感谢: 0
接收感谢: 0
联系:

Re: [三星]写一个程序或脚本,解决windows下zip包在linux下解压文件名乱码问题

#7

帖子 orangejuice » 2011-04-16 15:42

gbk纯粹就是多余,utf8好多了
搜索用百毒,下载用逊雷,杀毒用瑞腥,输入用馊狗,聊天用扣扣,播放用暴疯,手机用网禽,游览用癌易,微薄用新烂,上网用电性,视频用又哭,加班没工资,买房成房奴,乘着河蟹号,举着共党旗,嚼着双汇,再喝点三鹿,人生就完美了。

IE6用户的IQ最低 http://t.cn/aY7Gts 怪不得中国用ie6的人这么多,原来智商就是低于其他国家的人,甚至连苦难的非洲人民的智商都比大多数中国人高,不过这也要感谢党长期以来的愚民政策啊,人民越是愚蠢,党就越是高兴。
头像
lainme
论坛版主
帖子: 7805
注册时间: 2008-09-13 19:17
系统: Arch Linux (x86_64)
送出感谢: 3 次
接收感谢: 68 次
联系:

Re: [三星]写一个程序或脚本,解决windows下zip包在linux下解压文件名乱码问题

#8

帖子 lainme » 2011-04-16 21:02

lp的bug贴上已经有打过patch过的deb包了 :em06
rediscover
帖子: 3173
注册时间: 2010-01-13 23:26
送出感谢: 0
接收感谢: 12 次

Re: [三星]写一个程序或脚本,解决windows下zip包在linux下解压文件名乱码问题

#10

帖子 rediscover » 2011-04-16 22:11

Here I am.
Ubuntu 桌面培训 - 全中文官方文档,含汉化截图,提供PDF
头像
lilydjwg
论坛版主
帖子: 4163
注册时间: 2009-04-11 23:46
系统: Arch Linux
送出感谢: 11 次
接收感谢: 127 次
联系:

Re: [三星]写一个程序或脚本,解决windows下zip包在linux下解压文件名乱码问题

#11

帖子 lilydjwg » 2011-04-20 18:40

几乎每天都有人搜索“zip 乱码”找到我博客的: http://lilydjwg.is-programmer.com/posts/16293.html
头像
_shendu
帖子: 147
注册时间: 2010-09-17 14:16
送出感谢: 0
接收感谢: 0

Re: [三星]写一个程序或脚本,解决windows下zip包在linux下解压文件名乱码问题

#12

帖子 _shendu » 2011-06-07 18:35

mark :em06
--总有一条路,是通往幸福的
头像
websnail
帖子: 270
注册时间: 2006-06-01 12:42
送出感谢: 0
接收感谢: 0

Re: [三星]写一个程序或脚本,解决windows下zip包在linux下解压文件名乱码问题

#13

帖子 websnail » 2011-06-24 9:08

用ark毫无压力。
用的着重新发明一次车轮么?
世界上没有无缘无故的爱,也没有无缘无故的恨。
所以——没有人是活该被鄙视的。
头像
lilydjwg
论坛版主
帖子: 4163
注册时间: 2009-04-11 23:46
系统: Arch Linux
送出感谢: 11 次
接收感谢: 127 次
联系:

Re: [三星]写一个程序或脚本,解决windows下zip包在linux下解压文件名乱码问题

#14

帖子 lilydjwg » 2011-06-24 12:19

websnail 写了:用ark毫无压力。
用的着重新发明一次车轮么?
ark 是 KDE 程序吧?

代码: 全选

全部下载大小:   55.57 MB
全部安装大小:  160.90 MB
对于一个非 KDE 用户有必要么?而且,它不是脚本!我的 X 哪天崩溃了,但是急需解压个 zip 怎么办呢?
头像
linforest
帖子: 129
注册时间: 2008-12-23 16:38
送出感谢: 25 次
接收感谢: 0

Re: [三星]写一个程序或脚本,解决windows下zip包在linux下解压文件名乱码问题

#15

帖子 linforest » 2011-10-13 15:37

有没有傻瓜式的解决办法,不是所有的朋友都玩的来脚本。谢谢
回复

回到 “非常任务”