WIP/Unzipの日本語特化テストケース
基礎知識
Unix/Linuxのunzipは、zipアーカイブに含まれる複数の文字コードを適切に処理しない。ので、誰かがなんとかする必要がある。
- 「文字コードを適切に処理しない」症状は二通り。実装による。
- 保存不能: そもそも展開した結果のファイル名がUnix filename的に妥当でなく、保存不能
- 文字列破壊: そもそも展開した結果のファイル名がUnix filename的に妥当で、保存可能だが、オリジナルの文字列とは違う
- 「zipの文字化け」は、file-roller(フロントエンド)とunzip(バックエンド)の複合的な問題
- unzip side:
- 要約:生のunzipは多言語対応していない(保存不能レベル)。Ubuntuのunzipは-O/-Iオプションを拡張していて、文字コードを指定することで正しい文字コードに展開される。しかしfile-rollerは-O指定をしない。
- libnatspecを使うとこのあたりを自動で推定することが可能になる。が、unzip 6.10にはそうした拡張はまだ行われていない。
- libnatspecに含まれる examples/unzip-5.52-alt-natspec.patch を6.1へ移植すればよい。
- file-roller side:
誰かが「src/fr-command-zip.c::static void fr_command_zip_list (FrCommand *comm)」を直して、-O CHARSET指定を行えるようにする必要がある
- それには、現在の言語設定から、zipアーカイブで使われていると推定されるCHARSETを類推する仕組みが必要
- Windowsの実装に揃える、のか?(例:LANG=ja_JP.utf8→SHIFT_JISとか)
- これをテーブルで持つと不毛すぎるのでlibnatspecでひとつ。
- 追記:Japanese Remixのunzipは、zipアーカイブ内のファイル名から推定してSHIFT_JIS/EUC-JP/ISO-2022-JP/UTF-8から適切なものを自動で選んでくれるので、file-rollerサイドの対応は不要で動作する。
- unzip side:
テスト手順
準備
- 1) テスト環境からp7zip(p7zip-full)パッケージを除去する
$ sudo apt-get remove p7zip
- 2011/04現在、p7zipは多言語サポートが甘く「保存可能だが、オリジナルの文字列とは違う」状態になる。
- なので除去しておかないとテストにならない。
- 2) パッケージ環境を最新に更新する
テスト手順
- 1) 対象ファイルを取得する
- 2) file-roller(書庫マネージャ)で展開する
- 3) unzip コマンドで展開する
文字コード別対象ファイル
UTF-8
対象ファイル: UTF8.zip
- file-rollerの例:
- unzipの例:
- expected:
$ unzip UTF8.zip Archive: UTF8.zip creating: UTF8/ extracting: UTF8/UTF-8_SHIFTJIS???????????????.txt extracting: UTF8/UTF-8???????????????_( ???????????? ).txt $ ls -al UTF8 合計 8 drwxr-xr-x 2 hito hito 4096 2011-04-05 13:09 ./ drwxr-xr-x 3 hito hito 4096 2011-04-05 14:21 ../ -rw-r--r-- 1 hito hito 0 2011-04-05 13:09 UTF-8_SHIFTJISマップ可能.txt -rw-r--r-- 1 hito hito 0 2011-04-05 13:08 UTF-8固有文字列_( ◕‿‿◕ ).txt
- expected:
- TODO: wavedash-tilde問題もサポートすべき……だがどうやってテストする?
SHIFT_JIS(CP932)
対象ファイル:解凍すると文字化けするかも.zip
- file-rollerの例
- unzipの例
- expected:
$ unzip 解凍すると文字化けするかも.zip Archive: 解凍すると文字化けするかも.zip extracting: ??????????????????????????.txt $ ls -altr -rw-r--r-- 1 hito hito 0 2008-09-13 01:10 解凍すると文字化けするかも.txt -rw-r--r-- 1 hito hito 158 2011-04-05 12:39 解凍すると文字化けするかも.zip
- unexpected:
$ unzip 解凍すると文字化けするかも.zip Archive: 解凍すると文字化けするかも.zip extracting: ??????????????????????????.txt $ ls -altr -rw-r--r-- 1 hito hito 0 2008-09-13 01:10 ??????ƕ??????????邩??.txt -rw-r--r-- 1 hito hito 158 2011-04-05 12:39 解凍すると文字化けするかも.zip
- expected:
EUC-JP
(tbd)
ISO-2022-JP
(tbd)
- TODO: 要調査。そもそもISO-2022-JPでファイル名エンコーディングを行なうzip実装はあるのか?