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

  • 対象ファイル: UTF8.zip

  • file-rollerの例:
    • expected:

  • 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)

  • 対象ファイル:解凍すると文字化けするかも.zip

  • file-rollerの例
    • expected:
    • unexpectd:

  • 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実装はあるのか?

UbuntuJapaneseWiki: WIP/Develop/UnzipTestcase (最終更新日時 2012-01-10 11:49:12 更新者 匿名)