ZIPファイルのファイル名の文字化け問題
背景
ZIPファイルを展開すると、ファイル名が文字化けしていることがある。これどうにかならない? 調べたいこと
いまどきはOSのファイル名はUTF-8でないのか?
ZIPでアーカイブする時ににファイル名をUTF-8に変換することはは可能なのか?
最近Qiitaに解説があったので、そこを読んだが正確(実はまだ読んでない?) ToDo
ファイル名の文字コードはどうやって調べるの?
MacとWindowsだけでなく、iOSやAndroidも要確認か?
①をUTF-8(?)で入力することは可能か?
Macでアーカイブした時に、.DS_Store等のファイルをいれたくない問題
フォルダ単位ではなく、ファイル単位で解決?
GoogleドライブやOneDriveだとどうなのか?
なんとなくわかってきたこと
Windowsで作成したZIPファイルを、Macで展開することはできる。但し機種依存文字が文字化けする(Shift_JISなので)
Macで作成したZIPファイルを、Windowsで展開すると文字化けする。UTF-8と判断してくれない。 これはMacの作成したZIPファイルが、UTF-8フラグを有効にしてないため。
GoodleドライブのファイルをZIPファイルとしてダウンロードすると、ちゃんとUTF-8フラグがついてる。
MacでもWindowsでも文字化けしない
正しくZIPを取り扱えるアプリを双方で使えば問題無し?
Macの場合、フォルダごとZIP圧縮する場合には、.DS_Storeファイルの問題は別に考える必要がある。 zip コマンドでutf-8を扱えるっぽいが...(未検証)
ググってみた結果(あとでまとめる)
2007年にZIPフォーマットは拡張されてファイル名がUTF-8であることを示すフラグが追加されました。 ということは、現代においてはZIP作成時にファイル名の文字コードをUTF-8にしてこのフラグを立てれば文字化けはしないはずなのです。
$ zipinfo -v attachments.zip
ということで、Gmailの添付ファイルの一括ダウンロードは、MacでもWindowsでも大丈夫なように、UTF8 path nameってやつに対応していましたってことが分かる。
general purpose bit flag
Bit 11: ファイルエンコーディングのためのフラグ。これが立っているとき、コメントやファイル名の文字コードはUTF-8とする。
APPENDIX D - Language Encoding (EFS)
D.2 If general purpose bit 11 is unset, the file name and comment SHOULD conform
to the original ZIP character encoding. If general purpose bit 11 is set, the
filename and comment MUST support The Unicode Standard, Version 4.1.0 or
greater using the character encoding form defined by the UTF-8 storage
specification. The Unicode Standard is published by the The Unicode
Consortium (www.unicode.org). UTF-8 encoded data stored within ZIP files
is expected to not include a byte order mark (BOM).