Используйте специальную кодировку для чтения 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