LoginSignup
9
7

More than 5 years have passed since last update.

Windowsから送られてきたzipファイルを解凍する(日本語ファイル名が含まれている場合)

Last updated at Posted at 2015-04-11

概要

Windowsで作成したzipファイルをlinux上で解凍する際、日本語ファイル名やフォルダ名が文字化けする問題が発生。
Windowsサーバでzip圧縮したファイルをLinuxサーバで解凍することが何度かあったので備忘録として記しておきます。

原因

Windowsで作成したzip圧縮のファイル名エンコードはCP932(Shift_JIS)となっているため。
CP932とは: Microsoftコードページ932

Mac,Linuxでのzip圧縮のエンコードはUTF-8。Macでのunzipコマンドでの解凍では文字コードを自動判別してくれるので、問題ないが、linuxでのunzipコマンドでは文字化けしてしまうので、パッチをあてて修正版unzipつくる必要がある。ディストリビューションによって対処方法がまちまちなので、ここではその対処法はとりません。

対処法

unzip-cp932.pl

#!/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を使用する場合

9
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
7