WIP/Unzipの日本語特化テストケース ---------------------------------------------------- == 基礎知識 == Unix/Linuxのunzipは、zipアーカイブに含まれる複数の文字コードを適切に処理しない。ので、誰かがなんとかする必要がある。 * 「文字コードを適切に処理しない」症状は二通り。実装による。 * 保存不能: そもそも展開した結果のファイル名がUnix filename的に妥当でなく、保存不能 * 文字列破壊: そもそも展開した結果のファイル名がUnix filename的に妥当で、保存可能だが、オリジナルの文字列とは違う * 「zipの文字化け」は、file-roller(フロントエンド)とunzip(バックエンド)の複合的な問題 * unzip side: * https://bugs.launchpad.net/ubuntu/+source/unzip/+bug/580961 * 要約:生の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: * https://bugs.launchpad.net/file-roller/+bug/177929 * 誰かが「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サイドの対応は不要で動作する。 == テスト手順 == === 準備 === * 1) テスト環境からp7zip(p7zip-full)パッケージを除去する {{{ $ sudo apt-get remove p7zip }}} * 2011/04現在、p7zipは多言語サポートが甘く「保存可能だが、オリジナルの文字列とは違う」状態になる。 * なので除去しておかないとテストにならない。 * 2) パッケージ環境を最新に更新する === テスト手順 === * 1) 対象ファイルを取得する * 2) file-roller(書庫マネージャ)で展開する * 3) unzip コマンドで展開する ---------------------------------------------------- = 文字コード別対象ファイル = == UTF-8 == * 対象ファイル: [[attachment:UTF8.zip]] * file-rollerの例: * expected: {{attachment:utf8_fileroller.png}} * 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 }}} * TODO: wavedash-tilde問題もサポートすべき……だがどうやってテストする? == SHIFT_JIS(CP932) == * 対象ファイル:[[attachment:解凍すると文字化けするかも.zip]] * https://bugs.launchpad.net/ubuntu-jp-improvement/+bug/269482 から取得したテストファイル * file-rollerの例 * expected: * unexpectd: {{attachment:shift_jis_fileroller_badcase.png}} * 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 }}} == EUC-JP == (tbd) == ISO-2022-JP == (tbd) * TODO: 要調査。そもそもISO-2022-JPでファイル名エンコーディングを行なうzip実装はあるのか?