Кодировка имен файлов в Zip
Есть zip-архив, который нужно распаковать с помощью SharpCompress (требование начальника использовать именно эту библиотеку), но при распаковке архива русские буквы превращаются в кракозябры (например название папки "исходные данные" превращаются в "¿ßσ«ñ¡δÑ ñá¡¡δÑ").
using Stream stream = File.OpenRead(archive);
using var reader = ReaderFactory.Open(stream);
while (reader.MoveToNextEntry())
{
if (!reader.Entry.IsDirectory)
{
reader.WriteEntryToDirectory(dectDir, extractionOptions);
}
}
Я пробовал сделать распаковку с использованием 1251 кодировки, но это также не помогает, "исходные данные" превращаются в "Ёбе®¤лҐ ¤ лҐ".
var opts = new ReaderOptions();
var encoding = Encoding.GetEncoding(1251);
opts.ArchiveEncoding = new()
{
CustomDecoder = (data, x, y) =>
{
return encoding.GetString(data);
}
};
using Stream stream = File.OpenRead(archive);
using var reader = ReaderFactory.Open(stream,opts);
while (reader.MoveToNextEntry())
{
if (!reader.Entry.IsDirectory)
{
reader.WriteEntryToDirectory(dectDir, extractionOptions);
}
}
PS. В перспективе архивы могут быть не только zip, поэтому используется stream, что позволяет автоматически распознавать тип архива.