##概要
Windowsで作成したzipファイルをlinux上で解凍する際、日本語ファイル名やフォルダ名が文字化けする問題が発生。
Windowsサーバでzip圧縮したファイルをLinuxサーバで解凍することが何度かあったので備忘録として記しておきます。
##原因
Windowsで作成したzip圧縮のファイル名エンコードはCP932(Shift_JIS)となっているため。
CP932とは: Microsoftコードページ932
Mac,Linuxでのzip圧縮のエンコードはUTF-8。Macでのunzipコマンドでの解凍では文字コードを自動判別してくれるので、問題ないが、linuxでのunzipコマンドでは文字化けしてしまうので、パッチをあてて修正版unzipつくる必要がある。ディストリビューションによって対処方法がまちまちなので、ここではその対処法はとりません。
##対処法
#!/usr/bin/perl
use Archive::Zip;
use Encode;
use Encode::Guess qw/CP932/;
my $zip = Archive::Zip->new($ARGV[0]) or die;
#print $ARGV[1];
chdir $ARGV[1];
for ($zip->members) {
$zip->extractMember($_, encode('UTF-8', decode('CP932', $_->fileName)));
}
引数に与えたzipファイルを解凍する際にエンコードを変更するのみ
##使用方法
上記perlスクリプトをファイル名unzip-cp932
にてパスのあたっている/usr/bin
以下に作成
そして実行モードに変更 chmod +x unzip-cp932
unzip-cp932 hoge.zip
##注意
CP932(Shift_JIS)以外のエンコードは化けるので注意。
Mac,Linuxで作成したzip圧縮のフォルダやファイル名のエンコードはUTF-8なので、unzip-cp932
は使えません。
あくまでWindowsで作成されたzipファイルを解凍する際に使用。
##他の例
windowsから送られてきたzipファイルを解凍するとファイル名が大変なことになっている時
上記のunzip -O cp932
のOcp932オプションを使用できず、解凍できない場合があった。
WinからLinuxへzipファイルなど持ってきた時の文字化け対処方法
上記、convmvを使用する場合