[三星]写一个程序或脚本,解决windows下zip包在linux下解压文件名乱码问题
- oneleaf
- 论坛管理员
- 帖子: 10448
- 注册时间: 2005-03-27 0:06
- 系统: Ubuntu 12.04
[三星]写一个程序或脚本,解决windows下zip包在linux下解压文件名乱码问题
1 任务内容: 写一个程序或脚本,解决windows下zip包在linux下解压文件名乱码问题
2 任务的难度: 三星
3 任务的目的: 掌握字符集和脚本语言
4 任务所涉及的软件: 不限
5 任务将大致消耗的时间: 1-3天
6 任务思路: 转换GBK文件名到UTF-8
2 任务的难度: 三星
3 任务的目的: 掌握字符集和脚本语言
4 任务所涉及的软件: 不限
5 任务将大致消耗的时间: 1-3天
6 任务思路: 转换GBK文件名到UTF-8
- oneleaf
- 论坛管理员
- 帖子: 10448
- 注册时间: 2005-03-27 0:06
- 系统: Ubuntu 12.04
Re: [三星]写一个程序或脚本,解决windows下zip包在linux下解压文件名乱码问题
给一个PHP写的解压缩脚本,来源: http://micy.cn/blog/post/118
使用:
将下面的脚本存到自己home目录下的bin里面, 比如放到 ~/bin/punzip,然后 chmod +x ~/bin/punzip,以后就可以比较自由的直接调用 punzip foo.zip 来解压了。
继续寻求其他语言开发的代码。
使用:
将下面的脚本存到自己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
- 来自: 长沙
- Don't kiss me!
- 帖子: 717
- 注册时间: 2010-02-28 23:13
- oneleaf
- 论坛管理员
- 帖子: 10448
- 注册时间: 2005-03-27 0:06
- 系统: Ubuntu 12.04
Re: [三星]写一个程序或脚本,解决windows下zip包在linux下解压文件名乱码问题
呵呵,给出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
Re: [三星]写一个程序或脚本,解决windows下zip包在linux下解压文件名乱码问题
难得一见,呵呵,不懂纯支持~~~
醉了星星,醉月亮●●●●●The Long Way To Go(*^_^*)
- orangejuice
- 帖子: 112
- 注册时间: 2010-07-16 10:26
- 联系:
Re: [三星]写一个程序或脚本,解决windows下zip包在linux下解压文件名乱码问题
gbk纯粹就是多余,utf8好多了
搜索用百毒,下载用逊雷,杀毒用瑞腥,输入用馊狗,聊天用扣扣,播放用暴疯,手机用网禽,游览用癌易,微薄用新烂,上网用电性,视频用又哭,加班没工资,买房成房奴,乘着河蟹号,举着共党旗,嚼着双汇,再喝点三鹿,人生就完美了。
IE6用户的IQ最低 http://t.cn/aY7Gts 怪不得中国用ie6的人这么多,原来智商就是低于其他国家的人,甚至连苦难的非洲人民的智商都比大多数中国人高,不过这也要感谢党长期以来的愚民政策啊,人民越是愚蠢,党就越是高兴。
IE6用户的IQ最低 http://t.cn/aY7Gts 怪不得中国用ie6的人这么多,原来智商就是低于其他国家的人,甚至连苦难的非洲人民的智商都比大多数中国人高,不过这也要感谢党长期以来的愚民政策啊,人民越是愚蠢,党就越是高兴。
- lainme
- 论坛版主
- 帖子: 7805
- 注册时间: 2008-09-13 19:17
- 系统: Arch Linux (x86_64)
- 联系:
- photor
- 论坛版主
- 帖子: 11004
- 注册时间: 2008-04-26 12:41
-
- 帖子: 3173
- 注册时间: 2010-01-13 23:26
Re: [三星]写一个程序或脚本,解决windows下zip包在linux下解压文件名乱码问题
Here I am.
Ubuntu 桌面培训 - 全中文官方文档,含汉化截图,提供PDF
Ubuntu 桌面培训 - 全中文官方文档,含汉化截图,提供PDF
- lilydjwg
- 论坛版主
- 帖子: 4252
- 注册时间: 2009-04-11 23:46
- 系统: Arch Linux
- 联系:
Re: [三星]写一个程序或脚本,解决windows下zip包在linux下解压文件名乱码问题
几乎每天都有人搜索“zip 乱码”找到我博客的: http://lilydjwg.is-programmer.com/posts/16293.html
- _shendu
- 帖子: 147
- 注册时间: 2010-09-17 14:16
- websnail
- 帖子: 270
- 注册时间: 2006-06-01 12:42
Re: [三星]写一个程序或脚本,解决windows下zip包在linux下解压文件名乱码问题
用ark毫无压力。
用的着重新发明一次车轮么?
用的着重新发明一次车轮么?
世界上没有无缘无故的爱,也没有无缘无故的恨。
所以——没有人是活该被鄙视的。
所以——没有人是活该被鄙视的。
- lilydjwg
- 论坛版主
- 帖子: 4252
- 注册时间: 2009-04-11 23:46
- 系统: Arch Linux
- 联系:
Re: [三星]写一个程序或脚本,解决windows下zip包在linux下解压文件名乱码问题
ark 是 KDE 程序吧?websnail 写了:用ark毫无压力。
用的着重新发明一次车轮么?
代码: 全选
全部下载大小: 55.57 MB
全部安装大小: 160.90 MB
- linforest
- 帖子: 129
- 注册时间: 2008-12-23 16:38
Re: [三星]写一个程序或脚本,解决windows下zip包在linux下解压文件名乱码问题
有没有傻瓜式的解决办法,不是所有的朋友都玩的来脚本。谢谢