CentOSで、Windows上で圧縮された日本語を含むZIPファイルを文字化けなく解凍する方法


Windows上で圧縮されたファイルに日本語名が含まれていると、解凍ツールによっては解凍した時に文字化けする。Windows や Mac なら対応している GUIツールが見つかるが、CentOS 上ではちょと工夫が必要だったので忘備録として書いておきます。

調べると、 CentOS 上で日本語ファイルが含まれるZIPファイルを解凍する場合、7-Zip(7z) と convmv を使えばよろしい、というところまでは行き着いたものの、実際には文字化けが解消せず、色々調査。

結果、以下のサイトで解法を見つけました。感謝。
How to extract zip file which contains filenames with SHIFT_JIS encoding in Ubuntu

ポイント

最初に 7z を使う時に、現在なら通常は環境変数 LANG=ja_JP.utf8 になっているところを、utf8 を除いて LANG=ja_JP にしておく。

7-Zip は LANGオプションを読んで挙動を変更するらしい。このため、解凍した時にオリジナルの Shift_JIS(CP932) ファイル名のまま残るように、環境の文字コードは無指定にしておく。

手順

環境変数の変更

sh系の場合

% export LANG=ja_JP

cshの場合

% setenv LANG ja_JP

7-Zip で解凍

% 7z x archive.zip

convmv で文字コード変更

プレビュー

% convmv -f shift-jis -t utf8 *.pdf

確定

% convmv -f shift-jis -t utf8 --notest *.pdf

環境変数を戻す

(戻さないと、ls などでは文字化けして見える)

sh系の場合

% export LANG=ja_JP.utf8

cshの場合

% setenv LANG ja_JP.utf8