07 May 2015

(Linux) ShiftJISエンコードのzipファイルを作成する

Linuxで日本語のファイル名を持ったファイルをzip圧縮すると、Windows側で文字化けして読めないということがある。どうしても日本語のファイル名を使いたい場合は、ファイル名をUTF8からShiftJISに一時的に変更してzip圧縮する必要がある。

Windows, Linuxでのファイル名の文字エンコード別状況

20150507-ubuntu-sjis.jpg
UbuntuでShiftJISエンコードのzipを閲覧 → NG


20150507-ubuntu-utf8.jpg
UbuntuでUTF8エンコードのzipを閲覧 → OK

20150507-win-sjis.jpg
WindowsでShiftJISエンコードのzipファイルを閲覧 → OK


20150507-win-utf8.jpg
WindowsでUTF8エンコードのzipファイルを閲覧 → NG

つまり、どちらかのエンコードを選択すれば、両環境で閲覧できる「最適解」は存在しない。 自己解決というアタリマエのことが出来ない人が相対的に多いWindows環境に合わせて、ShiftJISエンコードでzip圧縮するほうが、何かと安全だと思う。

Linux上でWindows対応(SJISエンコードの)zipファイルを作成

圧縮したいファイルがあるディレクトリで、convmvを使って、まずUTF8エンコードのファイル名をShiftJISエンコードに変換する。この時に、Linuxのファイルシステムでのエラーを抑止するため--notestスイッチを必ず付ける。

zip圧縮後、今度はShiftJISからUTF8エンコードにconvmvを使って戻す。これをしないと、Linuxファイルシステム上でファイル名のエラーが残存してしまい、ファイルを消去したりすることすらできなくなる。

$ convmv -r -f utf8 -t sjis --notest ./*
$ zip ../archive.zip ./*
$ convmv -r -f sjis -t utf8 --notest ./*

Linux上でWindowsで作られたShiftJISエンコードのzipを解凍

unarコマンドを使う。解凍されたファイルは、zipファイル名と同一のサブディレクトリが作成され、その中に格納される。

$ unar archive.zip

Windows上でLinux/Macで作られたUTF8エンコードのzipを解凍

Microsoftのパッチファイルを適用すれば、解凍できるようです。

File names are corrupted after you decompress