ZIP : UTF8でエンコードされたエントリ名が読めない

Issue #1427 closed
Ito Mitsuhiro repo owner created an issue

Macなどで作成したファイル名の文字エンコードが shift_jis ではないファイルを含むアーカイブが
プレイリストから開くことができなくなったのでご報告します。

アーカイブ内のファイル/ディレクトリ名が shift_jis でエンコードされたものを shift_jis.zip 、
utf8でエンコードされたものを utf_8.zip として、以前のバージョンで作成したプレイリストは以下のようになっています。

// エントリA
{
"Path": "\\\\foo\\bar\\shift_jis.zip\\日本語\\001.jpg",
},
// エントリB
{
"Path": "\\\\foo\\bar\\utf_8.zip\\日本語\\001.jpg",
},

以前のバージョンではエントリA, B それぞれ開くことができましたが
直近のバージョンではエントリAはOKですがエントリBを開くと以下のエラーが表示されます。
"表示できません \\foo\bar\utf_8.zip\日本語\001.jpg の読み込みに失敗しました。\\foo\bar\utf_8.zip\日本語\001.jpg が見つかりません。"

また、utf_8.zip に対してプレイリストの新規エントリを追加することもできませんでした。
該当するアーカイブ及びプレイリストがたくさんあるのでどうにか以前の挙動に寄せてくださると嬉しいです

Comments (10)

  1. Ito Mitsuhiro reporter

    おそらくフレームワークの違いによるもの。

    最近のZipフォーマットにはUTF8フラグがあり、これがない場合の文字エンコードは不定。この場合の文字エンコードをOS既定の文字エンコード(日本ならCP932)を指定するようにしている。 39.5以前 (.NET Framework) ではこの指定はなく、おそらく内部で自動判別しているものと思われる。

    古いMacで作られたZipファイルはおそらくUTF8フラグがない状態でありながらUTF8エンコードになっていると思われる。

    これらを解決するには

    • Zipフォーマットを解析してエントリ名部分だけ取り出す処理
    • 文字コードを自動判別 (UTF8か否か) する処理

    が必要になる。対応コストがきつい。どうしよう。

  2. Ito Mitsuhiro reporter
    • ZipEncondig.Local のときも UTF-8 フラグのチェックを行うようにした。これが以前の動作に最も近いです (refs #1427)

    → <<cset 814e98c5736f>>

  3. Log in to comment