Set the UTF-8 flag for zip entry names encoded as UTF-8 without a BOM

This commit is contained in:
Wleeaf
2026-10-26 16:48:33 +00:00
parent f34ac19f22
commit ea2986708f
3 changed files with 38 additions and 6 deletions

View File

@@ -104,9 +104,10 @@ internal class ZipCentralDirectoryEntry
version = 20;
}
var flags = Equals(archiveEncoding.GetEncoding(), Encoding.UTF8)
? HeaderFlags.Efs
: HeaderFlags.None;
var flags =
archiveEncoding.GetEncoding().CodePage == Encoding.UTF8.CodePage
? HeaderFlags.Efs
: HeaderFlags.None;
if (UsesDataDescriptor)
{
flags |= HeaderFlags.UsePostDataDescriptor;

View File

@@ -207,9 +207,12 @@ public partial class ZipWriter : AbstractWriter
{
stream.Write(stackalloc byte[] { 63, 0 }); //version says we used PPMd or LZMA
}
var flags = Equals(WriterOptions.ArchiveEncoding.GetEncoding(), Encoding.UTF8)
? HeaderFlags.Efs
: 0;
// Compare code pages: Encoding.Default on .NET Core is a UTF-8 encoding without a BOM,
// which isn't Equal to Encoding.UTF8.
var flags =
WriterOptions.ArchiveEncoding.GetEncoding().CodePage == Encoding.UTF8.CodePage
? HeaderFlags.Efs
: 0;
if (usesDataDescriptor)
{
flags |= HeaderFlags.UsePostDataDescriptor;