Linuxで日本語のファイル名を持ったファイルをzip圧縮すると、Windows側で文字化けして読めないということがある。どうしても日本語のファイル名を使いたい場合は、ファイル名をUTF8からShiftJISに一時的に変更してzip圧縮する必要がある。
Windows, Linuxでのファイル名の文字エンコード別状況
WindowsでShiftJISエンコードのzipファイルを閲覧 → OK
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のパッチファイルを適用すれば、解凍できるようです。