UNICODE ZIPに対応した圧縮/解凍ソフトについて

# 概要

ZIPファイルはPhil Katzさん(PKWARE)が開発した、主に *Windows* 向けの圧縮ファイル コンテナです。
Windows XPでExplorerが対応した為か、今ではほぼ標準的に世界で利用されている(様子)。
また現在では、JavaのJAR形式やOpen Document、Office Open XML、FirefoxのプラグインのXPIなど様々なプラットフォームで多種多様な利用がされている。

ZIPファイルは途中からUNICODEにも対応しているフォーマットなのだが、未だに浸透度が低く、文字化けの問題が多く起きる。そもそも、正しいUNICODE ZIPを作成出来るツールは？と言うことで私見で幾つかのWindows向けのツールを調べてみた。

# 補足
本記事は2017年1月に調査した結果の記して下書きになっていたものを多少手直ししたものです。
(勿体ないので)
最終的なところはご自身で調査・確認をお願いします。
また、文字化けの原因については

- [libraplanet / ZipHeaderViewer — Bitbucket](https://bitbucket.org/libraplanet/zipheaderviewer)

に記載してますので、気になる方はご参照ください。


***

# APPNOTE
まず仕様の確認の為、APPNOTEを見る。

[PKWARE- Application Note Archives]
(https://support.pkware.com/display/PKZIP/Application+Note+Archives)

APPNOTEには、6.3.0からUNICODEの記載がある。

## 要約
- APPNOTE-6.3.0.TXT (2006/09/29)
- general purpose bit flagの11bit目がLanguage encoding flag
- Language encoding flagが1の場合、ファイル名やコメントにUNICODEを使用するとのこと
- UNICODEはUTF-8
- ファイル単位に指定可能
  - Local File Header(PK0304)
  - Central Directory Header(PK0102)

***

# 比較
幾つかのWindows向けの主要アプリの比較を行ってみた。
なお、ここで言うUNICODEはAPPNOTEに則り

* Language encoding flagが立っている
* ファイル名がUTF-8で格納される

を満たしていることを挿す。
(ASCIIのみでもLanguage encoding flagが立っているかは未検証)

***

## メジャー系
| app| ver| 評価 | I/F | ANSI 解凍 | ANSI 圧縮 | UNICODE 解凍 | UNICODE 圧縮 | 備考 |
|:---------|---------:|:---------:|:-----------|:------:|:------:|:-------:|:-------------:|:--|
| [7-zip](http://7-zip.org/)|    16.04 | ★★★★☆ | Explorer型 | OK     | OK     | OK      | OK<br>(cu=on) | オプションでUNICODE圧縮可<br>Entry毎の文字コードも確認可能 |
| [Explzh](http://www.ponsoftware.com/)|    7.5.2 | ★★★★☆ | Explorer型 | OK     | OK     | OK      | OK         | 設定でUNICODE可 |
| [WinRAR](http://www.rarlab.com/)|   5.40jp | ★★☆☆☆ | Explorer型 | OK     | OK     | OK      | **NG**     | UNICODE圧縮不可。<br>RAR書庫を使おう(苦笑) |

***

## 国内系
| app| ver| 評価 | I/F | ANSI 解凍 | ANSI 圧縮 | UNICODE 解凍 | UNICODE 圧縮 | 備考 |
|:---------|---------:|:---------:|:-----------|:------:|:------:|:-------:|:-------------:|:--|
| [Lhaplus](http://www7a.biglobe.ne.jp/~schezo/)|     1.73 | ☆☆☆☆☆ | 直接解凍    | OK     | OK     | **NG**  | **NG**     | 過去の遺産<br>UNICODE普及<br>の妨げになっている<br>(後述) |
| [+Lhaca](http://park8.wakwak.com/~app/Lhaca/)|     0.76 | ☆☆☆☆☆ | 直接解凍    | OK     | OK     | **NG**  | **NG**     | 過去の遺産 |
| [LhaForge](http://claybird.sakura.ne.jp/)|    1.6.5 | ★★☆☆☆ | Explorer型 | OK     | OK     | OK      | OK         | 設定でUNICODE可 |
| [Cube ICE](http://www.cubesoft.jp/cubeice/)|    0.7.3 | ☆☆☆☆☆ | 直接解凍    | OK     | OK     | OK      | **NG**     | 国産なのに旨味なし|

***

## 海外系
| app| ver| 評価 | I/F | ANSI 解凍 | ANSI 圧縮 | UNICODE 解凍 | UNICODE 圧縮 | 備考 |
|:---------|---------:|:---------:|:-----------|:------:|:------:|:-------:|:-------------:|:--|
| [Pea ZIP](http://www.peazip.org/)|     6.30 | ★★☆☆☆ | Explorer型 | OK     | **NG** | OK      | OK         | |
| [IZArc](http://www.izarc.org/)|      4.2 | ☆☆☆☆☆ | Explorer型 | OK     | OK     | OK      | **NG**     | |
| [ZipWare](www.zipware.org/downloadzipware.shtml)|      1.4 | ☆☆☆☆☆ | Explorer型 | OK     | OK     | OK      | OK         | |

***

## sfx stub
ツールによっては自己解凍書庫の作成用のsfx stubが同梱されている。
自己解凍書庫の作成には既存のZIPファイルとsfx stubを組み合わせて使えるものがあり、
sfx stubごとに、作成された自己解凍書庫の解凍能力について比較。

| app| ANSI 解凍 | ANSI password 解凍 | UNICODE 解凍 | UNICODE password 解凍 | 備考 |
|:----------------------|----------:|:--:|:--:|:--:|:--:|:--|
| [7z.sfx](http://7-zip.org/)| OK        | OK        | OK        | **NG** | パスワード入力を求められず、解凍出来てしまう |
| [Explzh](http://www.ponsoftware.com/)| OK        | OK        | OK        | OK     | 現状唯一のフルスペックSfx stub |
| [WinRAR](http://www.rarlab.com/)| OK        | OK        | OK        | **NG** | パスワードの誤入力で正しくないバイナリ |
| [Lhaplus](http://www7a.biglobe.ne.jp/~schezo/)| OK        | ？？？？   | **NG**    | **NG** |  |
| [UNZIPSFX32 (Info ZIP)](http://infozip.sourceforge.net/) | OK        | **NG**    | **NG**    | **NG** |  |
| [IZArc](http://www.izarc.org/)| OK        | **NG**    | **NG**    | **NG** |  |

※パスワード形式については網羅していない


***
# 結果
- UNICODE対応を謳うツールのほとんどが解凍能力のみ (何で作られたZIPの話しているんだ？)。
- sfx stubについては殆どがANSI 解凍能力しか持っていない。
- 7-zipをバックエンドに使っていても、UNICODE対応が出来ていないツールが多い。
- 自己解凍書庫がUNICODEとパスワードに対応しているExplzhの1人勝ち感すごい。
- 7-zipのGUIはUNICODEのエントリかが確認できる現状唯一のソフト。
- 昔はダブルクリックでの直接解凍系が流行っていたが今は時代ではない。
- セキュリティ的観点でも、直接解凍型は推奨するべきではない。
    - 過去の事例：[窓の杜 - 【NEWS】多くの解凍ソフトに指定外の場所へファイルが解凍されてしまう脆弱性が存在 ](https://forest.watch.impress.co.jp/article/2004/07/30/arcsecurity.html)
- 解凍前に中身を確認し、解凍は明示的な操作で行うExplorer型が主流。


***

# 私見
ZIPのUNICODE対応については、圧縮ソフト側がほとんど対応していないのが浸透しない大きな要因の1つだと思う。

また、APPNOTEのページでは、current versionが6.2.0の様な記載があり、また6.2.0にはUNICODEの記載がない。

[PKWARE- Application Note Archives]
(https://support.pkware.com/display/PKZIP/Application+Note+Archives)
>6.2.0 – 04/26/2004
This version is provided in support of ECMA-376 and ISO/IEC 29500, the standards for Office Open XML File Formats. These document standards incorporate ZIP technology based on this specification.

加えて、UNICODEの記載がされた以降のAPPNOTEがOther Archived Versionsとされてしまっている。これらの記載により **6.2.0がスタンダートなZIPの仕様** と言う認識になり、多くのアプリケーションがこれまでの実装に着地されているのではと思う。実際なかなか1つの言語の中で扱っていると文字化けに遭遇しづらい。

もとよりUNICODEを使う7zやRARなど、後発のアーカイバは圧縮アルゴリズムも高く優位というのもあり、実用途はもう譲っているのかな。また、PKWARE的にはZIPファイルは現状互換性を優先している、と言うのであれば、少し納得できるかもしれない。
(7-zipのUNICODEもオプションであり、デフォルトは非UNICODEなのも、恐らく互換性のためだと思われる。)

しかし、窓の杜のトップの『無料で使える定番フリーソフト選！』に、UNICODE ZIPに対応していないLhaplusが掲載され続けており、日本でのUNICODE ZIPの普及の妨げになっていると考えられる。こればっかりは何とかしてほしい。



# おまけ
比較詳細

- [ざっくりArchiverのZIP対応状況比較.pdf](https://drive.google.com/file/d/1-wJBUNzBmwVfa_9APjaKDoOucFOPeyVr/view?usp=sharing)

手前味噌ですが、以前簡易的に作った、ZIPヘッダーを見るツール

- [libraplanet / ZipHeaderViewer — Bitbucket](https://bitbucket.org/libraplanet/zipheaderviewer)

# 追記① 2018/12/18(火)
[Bandizip](https://jp.bandisoft.com/bandizip/)を確認

- UNICODEの圧縮/解凍に対応
- 自己解凍書庫で、UNICODE + password付きに対応
- ZoneIDの継承無し設定あり
- ポータブル版あり

と言う具合でフルスペックでした。なかなか良い自己解凍stubを持っている様で、Explzhの独壇場ではなくなり、甲乙つけがたい結果となりました。
気が向いたらリストに反映させたいです。

# 追記② 2019/02/16(土)
無駄な記載があったため、若干整理しました。

# 追記③ 2020/02/05(水)
誤記修正
(@kazku さん、ご指摘ありがとうございます。)

- 誤：ANCI
- 正：ANSI

# 追記④ 2020/03/17(火)
sfx stubの評価項目についての内容追記と、誤記修正
(@mstshimo さん、ご指摘ありがとうございます。)

- 誤：stab
- 正：stub