長年、様々な問題が絡み合って迷走していたazipがようやく決着した……と思います。
ちなみに、azipはそれを使うように書かれてしまった過去のバッチやaZipWrapper.dllを使うソフトの互換を維持して結果を改善するために作成したもので、あえて他のツールを捨てて乗り換える価値があるものではありません。DotNetZipのzipit.exeなどを使う方が高機能です。念のため。
変更内容 §
DotNetZip 1.7を使うように変更。実行にはIonic.Zip.dll Ver 1.7が必要。aZipWrapperの仕様は変更無し。WindowsのZIPフォルダで日本語ファイル名に互換性を持たせるように変更。
補足的な説明 §
過去にあった問題は主に2点です。
- J#のライブラリを使っていた時代に、ヘッダーが壊れたZIPファイルが作成されていた (GSFinderやExぱんだで扱えないファイルが生成されていた。希にWindowsのZIPフォルダでも扱えないファイルが作成されていた)
- 他のライブラリでは日本語ファイル名が化けていた
この2つも問題を全て解決するまで、かなり時間を要してしまいました。
終わってみれば、自分で対処すれば良かったのかも……と思いますが、後の祭です。
さて、現時点でこれに対応できる方法は2つ分かっています。(いずれも日本語ディレクトリ、ファイル名をWindowsのZIPフォルダ、GSFinder、Exぱんだで確認済み)
- DotNetZip 1.7をコードページ932(あるいはEncoding.Default)で使う
- IronPythonのソースに含まれるzip.csのエンコードをEncoding.Defaultに変更して使う
最終的にDotNetZipを選んで採用しましたが、理由は既にDotNetZipの過去バージョンに対応のコードが作成済みだったからです。とはいえ、実は仕様が大幅に変わっていて、かなり修正の手間を必要としました。この選択で良かったのかは分かりません。
tsetupで更新するには §
NTTFユーザーはtsetup azipでインストール(更新)できます。