ZIP : UTF8でエンコードされたエントリ名が読めない
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)
-
reporter -
reporter やってみる
-
reporter https://github.com/dotnet/runtime/issues/92283
現状だとZIPのUTF8フラグが機能してないっぽい。まじか…
-
reporter ZIP文字コード自動判別処理追加 (refs
#1427) ZIP文字コード設定追加→ <<cset 8ae10e6508bc>>
-
reporter - 文字コード判定のZIP64対応 (refs
#1427)
→ <<cset 3284c3380263>>
- 文字コード判定のZIP64対応 (refs
-
reporter - ZipEncondig.Local のときも UTF-8 フラグのチェックを行うようにした。これが以前の動作に最も近いです (refs
#1427)
→ <<cset 814e98c5736f>>
- ZipEncondig.Local のときも UTF-8 フラグのチェックを行うようにした。これが以前の動作に最も近いです (refs
-
reporter アーカイブ設定変更後にブックを開き直しても変更が適用されないことがある不具合修正 (fixed
#1356) (refs#1427)→ <<cset 032e6d879aae>>
-
reporter - changed status to resolved
-
reporter - より厳密に UTF-8 フラグを適用 (refs
#1427)
→ <<cset 06ddc9f2a354>>
- より厳密に UTF-8 フラグを適用 (refs
-
reporter - changed status to closed
- Log in to comment
おそらくフレームワークの違いによるもの。
最近のZipフォーマットにはUTF8フラグがあり、これがない場合の文字エンコードは不定。この場合の文字エンコードをOS既定の文字エンコード(日本ならCP932)を指定するようにしている。 39.5以前 (.NET Framework) ではこの指定はなく、おそらく内部で自動判別しているものと思われる。
古いMacで作られたZipファイルはおそらくUTF8フラグがない状態でありながらUTF8エンコードになっていると思われる。
これらを解決するには
が必要になる。対応コストがきつい。どうしよう。