WindowsのシフトJISファイル名を含むzipファイルを解凍する方法 †
本資料はCentOS5.4にて実行し確認しました。
Windowsで作成されたzipファイル内のファイル名はシフトJISのためCentOSのunzipコマンドを利用すると文字化けしてしまいます。
(Ubuntuであればunzipコマンドが日本語をサポートしているため問題なく解凍できます。)
unzipソースにパッチを当てるのが正攻法だと思うのですがperlにてスクリプトを書きましたので以下に使用方法を記します。
関連資料 †
Archive::Zipのインストール †
CPANにてArchive::Zipをインストールします。
注意 インストールにはgccが必要です。
インストールされていない場合はrootで以下のコマンドを入力しgccをインストールしてください。
# yum -y install gcc
Archive::Zipのインストール方法 †
rootになり以下のコマンドを実行してください。
コマンドを実行すると色々問い合わせをされるので基本的に「Enter」でOKです。
当方が入力した部分は赤字にしてあります。
途中でプロキシの設定がありますのでプロキシ経由の設定が必要な場合は Your ftp_proxy?やYour http_proxy?と問い合わせ表示がされたときに入力してください。
# perl -MCPAN -e shell
:
Are you ready for manual configuration? [yes]
:
(1) Africa
(2) Asia
(3) Australasia
(4) Central America
(5) Europe
(6) North America
(7) Oceania
(8) South America
Select your continent (or several nearby continents) [] 2
:
(1) China
(2) Hong Kong
(3) India
(4) Indonesia
(5) Japan
(6) Kazakhstan
(7) Republic of Korea
(8) Russia
(9) Singapore
(10) Taiwan
(11) Thailand
(12) Turkey
Select your country (or several nearby countries) [] 5
:
(1) ftp://ftp.dti.ad.jp/pub/lang/CPAN/
(2) ftp://ftp.jaist.ac.jp/pub/CPAN/
(3) ftp://ftp.kddilabs.jp/CPAN/
(4) ftp://ftp.nara.wide.ad.jp/pub/CPAN/
(5) ftp://ftp.riken.jp/lang/CPAN/
(6) ftp://ftp.ring.gr.jp/pub/lang/perl/CPAN/
(7) ftp://ftp.u-aizu.ac.jp/pub/CPAN
(8) ftp://ftp.yz.yamagata-u.ac.jp/pub/lang/cpan/
Select as many URLs as you like (by number),
put them on one line, separated by blanks, e.g. '1 4 5' [] 1 4 5
:
:
cpan> install Archive::Zip
:
:
:
cpan> quit
CPANの設定を間違えてしまった場合の対処 †
以下のコマンドで初期化できます。間違った場合に利用してください。
# perl -MCPAN -e shell
cpan> o conf init
作成スクリプト †
#!/usr/bin/perl
use strict;
use warnings;
use Archive::Zip;
use Encode;
if (@ARGV != 1) {
die "usage: $0 ZIPFILE\n";
}
my $zipfile = shift;
if (! -e $zipfile) {
die "$zipfile don't exist\n";
}
my $zip=Archive::Zip->new($zipfile);
my @items = $zip->memberNames();
my $utf8name;
foreach (@items) {
my $utf8name = $_;
Encode::from_to($utf8name, 'cp932', 'utf-8');
print "extract : $utf8name\n";
$zip->extractMember($_, $utf8name);
}
使用方法 †
- 上記スクリプトをダウンロードまたはカット&ペーストにて保存してください。
- chmodコマンドで実行権限をあたえてください。(下行例参照)
$ chmod +x unzip-sjis.pl
- unzip-sjis.pl zipファイル名で動作します。