Windowsでzip圧縮すると自動的にShift-jisで保存されてしまうらしく、これをLinuxで展開すると当然のようにファイル名が文字化けします。
今回はファイル名が非常に重要だったので対処することに。
unzipコマンドのオプション利用で解決
ネットで調べてみるとconvmvコマンドを使う方法を多く見かけますが今回はうまくいきませんでした。
困っていると、「ZIP ファイルの展開や圧縮でファイル名が文字化けする原因および解決策」というブログを見つけ無事解決。
$ unzip -Ocp932 <ZIP_FOLDER>
cp932とはshif-jisとして産まれたものが拡張→統合されたWindowsの文字コードのことなので、多分cp932でOpenって意味なんでしょう。(参考:CP932とMS932の違いを調べて知ったCP932とSJISの違い)
とりあえずこの方法で無事に文字化け無しの状態で展開されました。
convmvコマンド
今回はうまくいかなかったものの、一番よく見たのがconvmvコマンドを使う方法。
$ convmv -r -f utf8 -t shiftjis *
$ convmv -r -f utf8 -t cp932 --notest *
- -r オプション : 再帰的に
- -f オプション : from
- -tオプション : to
- –notestオプション : convmvを実行(これが無いとテストだけで実行はされない)
ファイル名が長すぎる場合は文字コードまで読み取ることができずにバイナリ扱いされてエラーになることがあるのだとか。上手く行かなかったのはそのせいかなぁと思っています。
一括で処理しようとしたので ワイルドカードでやってますが、個別ならファイル名を指定します。
ファイルの中身の文字化け
ついでにファイル自体の文字化けの対処。
nkfコマンドの -g オプション(–guessオプションを使うと改行コードも表示)で現状を調べてから変換するが吉。
$ nkf -g <FILE_NAME>
UTF-8
オプションに -s をつけるとShift-jisに変換。-e でeuc-jp、 -wでUTF8に変換します。
# UTF-8に変換して上書き保存
$ nkf -w --overwrite <FILE_NAME>
# Shift-jisに変換して上書き
$ nkf -s --overwrite <FILE_NAME>