Используйте специальную кодировку для чтения ZipArchive

Подскажите пожалуйста, как мне реализовать Encoding.GetEncoding ( "cp866")? В процессе экспорта из архива русские символы отображаются некорректно.

public static class ZipArchiveExtension
{
    public static void ExtractToDirectory(this ZipArchive archive, string destinationDirectoryName, bool overwrite)
    {
        if (!overwrite)
        {
            archive.ExtractToDirectory(destinationDirectoryName);
            return;
        }
        foreach (ZipArchiveEntry file in archive.Entries)
        {
            string completeFileName = Path.Combine(destinationDirectoryName, file.FullName);
            if (file.Name == "")
            {
                Directory.CreateDirectory(Path.GetDirectoryName(completeFileName));
                continue;
            }
            file.ExtractToFile(completeFileName, true);
        }
    }
}

FileStream zipToOpen = new FileStream(zipPath, FileMode.Open);
ZipArchive archive = new ZipArchive(zipToOpen);
ZipArchiveExtension.ExtractToDirectory(archive, extractPath, true);
zipToOpen.Dispose();

Как в System.IO.Compression: ZipFile.ExtractToDirectory(zipPath, extractPath, Encoding.GetEncoding("cp866"));

1 ответ

Решение

Для того, чтобы использовать конкретную кодировку на ZipArchive, это должно быть указано в конструкторе.

Вы должны быть в состоянии использовать конструктор с 4 аргументами:

ZipArchive archive = new ZipArchive(zipToOpen, ZipArchiveMode.Read, false, Encoding.GetEncoding("cp866"));

https://msdn.microsoft.com/en-us/library/hh875101(v=vs.110).aspx

Другие вопросы по тегам