
时间:2015-06-28 00:00 来源:IT猫扑网|http://www.itmop.com/ 作者:网管联盟 我要评论(0)
自己用的是日文的linux系统,昨天从同事那儿收了个压缩文件,结果解压之后文件名都乱吗了(内容正常显示)。网上google了以下发现是因为windows下默认的编码方式时Shift-JIS,到了linux下之后虽然内容可以显示但是文件名却乱码。解决方法也挺简单的,perl提供了一些方法,直接写一个简短的程序即可。
我也是从其他地方参照的,给一个例子程序。(这里需要安装Archive::Zip模块)
#!/usr/bin/perl
use strict;
use warnings;
use Archive::Zip qw( :ERROR_CODES :CONSTANTS );
use Encode qw/from_to/;
use Getopt::Long;
use DateTime;
use DateTime::TimeZone::Local;
GetOptions('list|l' => my $mode_list);
if (scalar @ARGV < 1) {
print &Usage: $0 [-l] <zip file>n&;
exit 1;
}
my $zipfile = shift @ARGV;
my $zip = Archive::Zip->new();
unless ( $zip->read($zipfile) == AZ_OK ) {
die 'read error';
}
print &Archive: $zipfilen&;
if ($mode_list) {
print <<HERE;
Length Date Time Name
-------- ---------- ----- ----
HERE
}
my $total_size = 0;
my @members = $zip->members();
my $members_count = scalar @members;
foreach my $member (@members) {
my $filename = $member->fileName;
from_to($filename, 'cp932', 'utf8');
if ($mode_list) {
my $dt = DateTime->from_epoch(
epoch => $member->lastModTime
)->set_time_zone(DateTime::TimeZone::Local->TimeZone());
$total_size += $member->uncompressedSize;
printf &%9d %s %sn&,
$member->uncompressedSize,
$dt->ymd('-') . ' ' . sprintf(&%02d&, $dt->hour) . ':' . sprintf(&%02d&, $dt->min),
$filename;
} else {
print & inflating: $filenamen&;
unless (defined $zip->extractMember($member, $filename)) {
warn & failed: $filenamen&;
}
}
}
my $members_count_str = &$members_count file& . ($members_count > 1 ? 's' : '');
if ($mode_list) {
print <<HERE;
-------- -------
HERE
printf &%9d %sn&, $total_size, $members_count_str;
}
关键词标签:日文压缩
相关阅读 安装红帽子RedHat Linux9.0操作系统教程 Tomcat9.0如何安装_Tomcat9.0环境变量配置方法 多种操作系统NTP客户端配置 Linux操作系统修改IP Linux实现SCSI硬盘热插拔及在线识别 Linux下用CDMA modem拨号上网
热门文章
安装红帽子RedHat Linux9.0操作系统教程
Linux服务器:设计高性能网站架构-LLMP
使用Clonezilla迁移到虚拟Linux环境
Linux上的MRTG流量监控中心
Linux 双网卡绑定一个IP原理及实现
linux和windows等系统远程控制ubuntu桌面
人气排行 Linux下获取CPUID、硬盘序列号与MAC地址 dmidecode命令查看内存型号 linux tc实现ip流量限制 安装红帽子RedHat Linux9.0操作系统教程 linux下解压rar文件 lcx.exe、nc.exe、sc.exe入侵中的使用方法 Ubuntu linux 关机、重启、注销 命令 查看linux服务器硬盘IO读写负载 linux命令行浏览器的使用方法 Linux NFS服务固定端口及防火墙配置 U盘安装Ubuntu 10.04 Linux清除用户登录记录和命令历史方法
查看所有0条评论>>