2011-10-18

ZIPファイルと文字バケ

Mac OS Xで作成したzipアーカイブを他のOS環境で伸張・展開(解凍)すると、日本語ファイル名が文字化けしてしまうことがある。だからMacは困るんだ。と、ぼやかれたり、どうすればいいですか? と、よく質問されるのでまとめてみる。

これはMacのアーカイブユーティリティーと、相手側でzipファイルを処理するプログラムとの間で、ファイル名の扱い方が異なるために起きる問題であり、大きく次の2つのパターンがある。

  1. UTF-8でエンコーディングされたファイル名をサポートしていない。
  2. UTF-8はサポートしているが、UTF-8-MACエンコーディングをサポートしていない。
Windowsで文字バケ

パターン1の例。Mac OS XのFinderから「“〜”を圧縮」コンテキストメニューで作成したzipファイルを、Windowsに持っていって展開すると日本語ファイル名が文字化けする。おまけに、「__MACOSX」というフォルダとともにWindowsには不要なファイルがモリモリ含まれてしまう。

Windows用のzipファイルを作成したければ、Mac App Storeから「WinArchiver Lite - Tida Inc.」でもインストールすればよいだろう(ちょっとしたやり取りならLiteのほうでも十分かと思われる)。

Kindleで文字バケ

パターン2の例。Amazon.comのKindle Personal Documents ServiceへのメールにMac OS Xで作成したzipファイルを添付するとWindowsに持ち込んだ場合とは、また違った化け方をする。

Kindle Library Webインターフェースでは日本語ファイル名も正しく表示されるのだが、デバイスに転送すると濁音・半濁音を含む部分が正常に表示されない(清音+□になる)。

この場合、アルファブロガーとして有名な 小飼弾氏のPerlスクリプトなんぞを使って変換してやればKindleでもファイル名が正しく表示されるzipを作成できる。

$ convzip.pl src(utf8-mac-nfd).zip dst(utf8-nfc).zip

※デフォルトがUTF-8になっているので-e cp932オプションはいらない。Windows用に変換したい場合は付ける。

要するに、zipアーカイブ内のファイル名をMacで使われている(でしか使われてない?)変態的なエンコーディング(NFD)によるものから、一般的なエンコーディング(NFC)のものに書き換えて解決する。

もっとも、Personal Documents Serviceは複数のファイルが添付されたメールも受け付けるので、zip圧縮せず、1通のメールにそれぞれのファイルを別々に添付するほうが手っ取り早い。

0 件のコメント:

コメントを投稿