このエントリーをはてなブックマークに追加


WindowsのシフトJISファイル名を含むzipファイルを解凍する方法

本資料はCentOS5.4にて実行し確認しました。
Windowsで作成されたzipファイル内のファイル名はシフトJISのためCentOSのunzipコマンドを利用すると文字化けしてしまいます。

unzip-ja-01.png
 

(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);
}

使用方法

  1. 上記スクリプトをダウンロードまたはカット&ペーストにて保存してください。
  2. chmodコマンドで実行権限をあたえてください。(下行例参照)
    $ chmod +x unzip-sjis.pl
  3. unzip-sjis.pl zipファイル名で動作します。
    unzip-ja-02.png
 

 

添付ファイル: fileunzip-ja-01.png 558件 [詳細] fileunzip-sjis.pl 821件 [詳細] fileunzip-ja-02.png 631件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2017-01-11 (水) 14:34:59