ZipArchiveEntry の名前とコメントは UTF8 フラグを尊重する
ZipArchive は Encoding パラメータを使用して作成でき、ZIP アーカイブ内のエントリの名前とコメントをデコードするために使用されます。 .NET 7 では、このエンコーディングが既定で使用されるという回帰が導入され、エンコーディングが指定されていない場合は、システムの既定のコード ページ (.NET Core では UTF8) にフォールバックします。 この回帰は .NET 9 で修正されています。エントリの汎用ビット フラグが UTF8 を使用する必要があることを示している場合は、それが尊重されます。 UTF8 ビット フラグが設定されていない場合は、ユーザーが指定したエンコーディングが使用されます (何も指定されていない場合は、システムのデフォルト コード ページへのフォールバックが行われます)。
以前の動作
.NET 7 および .NET 8 では、ZipArchive
がユーザー指定の entryNameEncoding
パラメータを使用してインスタンス化された場合、ZIP アーカイブ内のエントリの名前とコメントをデコードするときに常にこのエンコーディングが使用されていました。 エントリの名前とコメントが UTF8 でエンコードされていることを示すビットが設定されている場合でも、entryNameEncoding
が使用されました。
新しい動作
.NET 9 以降では、ZIP アーカイブ エントリの名前とコメントがデコードされるときに、UTF8 ビット フラグが尊重されるようになりました。 このビット フラグが設定されていない場合、ユーザー指定の entryNameEncoding
パラメータはエントリの名前とコメントをデコードするためにのみ使用されます。
導入されたバージョン
.NET 9 RC 1
破壊的変更の種類
この変更は、動作変更です。
変更理由
この変更により、.NET 7 および .NET 8 の回帰が修正されます。 また、ZIP ファイル形式仕様のセクション 4.4.4 および付録 D に準拠するために ZipArchive を返します。
推奨される操作
コードが ZipArchive コンストラクター にエンコーディングを渡す場合、このエンコーディングがすべての状況で尊重されるわけではないことに注意してください。 エントリの UTF8 ビットが設定されていない場合にのみ使用されます。
ZipArchive を使用して、名前が UTF8 以外の形式でエンコードされている (ただし、UTF8 ビット フラグが設定されている) ZIP エントリを解析している場合、解析できなくなります。 以前の動作はバグでした。
影響を受ける API
- ZipArchive(Stream, ZipArchiveMode, Boolean, Encoding)
- System.IO.Compression.ZipFile.ExtractToDirectory(Stream, String, Encoding, Boolean)
- System.IO.Compression.ZipFile.ExtractToDirectory(String, String, Encoding, Boolean)
- System.IO.Compression.ZipFile.ExtractToDirectory(String, String, Encoding)
- System.IO.Compression.ZipFile.ExtractToDirectory(Stream, String, Encoding)
- System.IO.Compression.ZipFile.Open(String, ZipArchiveMode, Encoding)
.NET