ZipArchiveEntry 名稱和註解遵循 UTF8 旗標
ZipArchive可以使用 Encoding 參數來建立,它是用來解碼 ZIP 封存中項目的名稱和註解。 .NET 7 引進了迴歸,其中預設會使用此解碼,如果未提供解碼,則會回退為系統預設程式碼頁 (.NET Core 中的 UTF8)。 .NET 9 中修正了此迴歸:如果該項目的一般用途位元旗標指出應該使用 UTF8,則會受到遵循。 如果未設定 UTF8 位元旗標,則會使用使用者提供的編碼 (如果沒有提供,則會使用現有的回退到系統預設程式碼頁。)
先前的行為
在 .NET 7 和 .NET 8 中,如果 ZipArchive
使用了使用者指定的 entryNameEncoding
參數具現化 ,則一律會在解碼 ZIP 封存中項目的名稱和註解時使用此編碼。 即使該項目已設定位元,仍會使用 entryNameEncoding
來表示其名稱和註解是以 UTF8 編碼。
新的行為
從 .NET 9 開始,當 ZIP 封存項目的名稱和註解被解碼時,會遵循其 UTF8 位元旗標。 使用者提供的 entryNameEncoding
參數只有在此位元旗標未設定時,才會用來解碼該項目的名稱和註解。
導入的版本
.NET 9 RC 1
中斷性變更的類型
此變更為行為變更。
變更原因
這項變更會修正 .NET 7 和 .NET 8 中的迴歸。 它也會傳回 ZipArchive 以符合 ZIP 檔格式規格,第 4.4.4 節和附錄 D。
建議的動作
如果您的程式碼將編碼傳遞至 ZipArchive 建構函式,請注意,在所有情況下都不會遵循此編碼。 它只有在未設定該項目的 UTF8 位元時使用。
如果您使用 ZipArchive 剖析以非 UTF8 格式編碼之名稱的 ZIP 項目 (但已設定 UTF8 位元旗標),您將無法再這麼做。 先前的行為是錯誤。
受影響的 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)