diff --git a/src/Files.App/Data/Models/CompressArchiveModel.cs b/src/Files.App/Data/Models/CompressArchiveModel.cs index d21d617f3b22..cb26f874e0e1 100644 --- a/src/Files.App/Data/Models/CompressArchiveModel.cs +++ b/src/Files.App/Data/Models/CompressArchiveModel.cs @@ -158,6 +158,10 @@ public async Task RunCreationAsync() }; compressor.CustomParameters.Add("mt", CPUThreads.ToString()); + //Use UTF-8 encoding. + //References: 7-zip chm --> Command Line Version --> Switches + //--> -m --> cu=[off | on]. + compressor.CustomParameters.Add("cu", "on"); compressor.Compressing += Compressor_Compressing; compressor.FileCompressionStarted += Compressor_FileCompressionStarted; diff --git a/src/Files.App/Utils/Storage/StorageItems/ZipStorageFile.cs b/src/Files.App/Utils/Storage/StorageItems/ZipStorageFile.cs index 91b304bbc3c8..dff6b9dc7d93 100644 --- a/src/Files.App/Utils/Storage/StorageItems/ZipStorageFile.cs +++ b/src/Files.App/Utils/Storage/StorageItems/ZipStorageFile.cs @@ -326,6 +326,7 @@ public override IAsyncAction RenameAsync(string desiredName, NameCollisionOption await using (var archiveStream = await OpenZipFileAsync(FileAccessMode.Read)) { SevenZipCompressor compressor = new SevenZipCompressor() { CompressionMode = CompressionMode.Append }; + compressor.CustomParameters.Add("cu", "on"); compressor.SetFormatFromExistingArchive(archiveStream); var fileName = IO.Path.GetRelativePath(containerPath, IO.Path.Combine(IO.Path.GetDirectoryName(Path), desiredName)); await compressor.ModifyArchiveAsync(archiveStream, new Dictionary() { { index, fileName } }, Credentials.Password, ms); @@ -375,6 +376,7 @@ public override IAsyncAction DeleteAsync(StorageDeleteOption option) await using (var archiveStream = await OpenZipFileAsync(FileAccessMode.Read)) { SevenZipCompressor compressor = new SevenZipCompressor() { CompressionMode = CompressionMode.Append }; + compressor.CustomParameters.Add("cu", "on"); compressor.SetFormatFromExistingArchive(archiveStream); await compressor.ModifyArchiveAsync(archiveStream, new Dictionary() { { index, null } }, Credentials.Password, ms); } diff --git a/src/Files.App/Utils/Storage/StorageItems/ZipStorageFolder.cs b/src/Files.App/Utils/Storage/StorageItems/ZipStorageFolder.cs index 7dacb414ff3f..0614a192fdd1 100644 --- a/src/Files.App/Utils/Storage/StorageItems/ZipStorageFolder.cs +++ b/src/Files.App/Utils/Storage/StorageItems/ZipStorageFolder.cs @@ -315,6 +315,7 @@ public override IAsyncOperation CreateFolderAsync(string desi await using (var archiveStream = await OpenZipFileAsync(FileAccessMode.Read)) { SevenZipCompressor compressor = new SevenZipCompressor() { CompressionMode = CompressionMode.Append }; + compressor.CustomParameters.Add("cu", "on"); compressor.SetFormatFromExistingArchive(archiveStream); var fileName = IO.Path.GetRelativePath(containerPath, zipDesiredName); await compressor.CompressStreamDictionaryAsync(archiveStream, new Dictionary() { { fileName, null } }, Credentials.Password, ms); @@ -366,6 +367,7 @@ public override IAsyncAction RenameAsync(string desiredName, NameCollisionOption await using (var archiveStream = await OpenZipFileAsync(FileAccessMode.Read)) { SevenZipCompressor compressor = new SevenZipCompressor() { CompressionMode = CompressionMode.Append }; + compressor.CustomParameters.Add("cu", "on"); compressor.SetFormatFromExistingArchive(archiveStream); var folderKey = IO.Path.GetRelativePath(containerPath, Path); var folderDes = IO.Path.Combine(IO.Path.GetDirectoryName(folderKey), desiredName); @@ -417,6 +419,7 @@ public override IAsyncAction DeleteAsync(StorageDeleteOption option) await using (var archiveStream = await OpenZipFileAsync(FileAccessMode.Read)) { SevenZipCompressor compressor = new SevenZipCompressor() { CompressionMode = CompressionMode.Append }; + compressor.CustomParameters.Add("cu", "on"); compressor.SetFormatFromExistingArchive(archiveStream); var entriesMap = new Dictionary(index.Select(x => new KeyValuePair(x.Index, null))); await compressor.ModifyArchiveAsync(archiveStream, entriesMap, Credentials.Password, ms); @@ -556,6 +559,7 @@ private static async Task InitArchive(Stream stream, OutArchiveFormat form CompressionMode = CompressionMode.Create, ArchiveFormat = format }; + compressor.CustomParameters.Add("cu", "on"); await compressor.CompressStreamDictionaryAsync(stream, new Dictionary()); await stream.FlushAsync(); return true; @@ -627,6 +631,7 @@ public IAsyncOperation CreateFileAsync(Stream contents, string await using (var archiveStream = await OpenZipFileAsync(FileAccessMode.Read)) { SevenZipCompressor compressor = new SevenZipCompressor() { CompressionMode = CompressionMode.Append }; + compressor.CustomParameters.Add("cu", "on"); compressor.SetFormatFromExistingArchive(archiveStream); var fileName = IO.Path.GetRelativePath(containerPath, zipDesiredName); await compressor.CompressStreamDictionaryAsync(archiveStream, new Dictionary() { { fileName, contents } }, Credentials.Password, ms);