ZIPファイル形式

保存したプロジェクトはファイル名の拡張子にかかわらずZIPアーカイブ形式になっています。プロジェクトの名前にAscii以外の文字を含む場合に、そのメンバーの名前をどのようなエンコーディングにするかが議論になりました。(http://www.kukakuka.jp/squeak/bugs/view.php?id=57
そこで原点であるZIPファイル形式自体を調べてみました。

[ZIPファイル形式ではどう定義されているか?]

ZIPの由来であるPKZip/PKUnzipのベンダーPKWare社がZIP形式についてのドキュメントを出しています。http://www.pkware.com/business_and_developers/developer/popups/appnote.txt
しかしここでは、メンバー名が格納されている場所のポインタと名前の長さだけが定義されており、メンバー名自体のエンコーディングが定義されていません。
そのことは、http://groups.yahoo.com/group/openreader-format/message/67 でも取り上げられています。JARの場合、utf8ベースでエンコードされているらしいということも書かれています。

[考察]

  • プロジェクトを保存する場合、最初にSqueakletsフォルダ内の一時フォルダに、個々のメンバーファイルを作成し、その後ZIPにまとめています。そのメンバーファイル名自体がプラットフォームネイティブのファイル名になるのは何も問題がないように思います。
  • 一般的なZIPファイル形式としてはメンバー名のエンコーディングを定義していないので、プロジェクトを保存する*.prの仕様として、エンコーディングを定義する必要があると思います。