архивами, в которых лежат файлики с именами в utf-8?
Использую https://metacpan.org/pod/IO::Uncompress::Unzip получаю кракозябры.
В новых релизах появился флаг Efs, я поставил, но не помогло.
Что-то я делаю не так может быть? Или надо другой модуль взять?
звучит как двойная кодировка в виндовой реализации зипа
выглядит вообще как тройная
скопируйте название файла, может получится раскодировать
а где зип паковался?
была похожая проблема, но с созданием архивов zip делался Archive::Zip - ом, имена файлов были с юникодом, а потом это архив не открывался помогло при при создании это: $Archive::Zip::UNICODE = 1;
iconv -f cp862 -t utf8 - помогает?
виндовой или нативной?
так начни с того, чтобы с помощью iconv определить кодировку вангую, 1251
unzip нормально разархивирует, в перле не получается
а распаковываете на какой системе?
сейчас в никсах unzip обычно собран с libnatspec, потому проблем с кодировкой нет
а в нем патченный поди unzip
возвращаясь к напечатанному: я распотрошил чтение полей заголовка файла в архиве и вот что он получает для имени "УПД": d7 a3 d7 9f d7 94 Это почти UTF-8 с заменой d7 на d0, верный вариант будет d0 a3 d0 9f d0 94 Кто-нибудь знает, это кодировка какая-то, или баг, или что?
Если маленькими буквами "упд" то WINDOWS-1251 -> ISO-8859-8
второй вариант WINDOWS-1251 -> WINDOWS-1255
мне не удалось вспомнить такой пары кодировок что бы за одно перекодирование получался такой фифект. может или кодировка экзотическая или двойная перекодировка.
удивительно, сколько в подсказках было кодировок иврита: cp862, windows-1255, но почему-то никто не подсказал про cp866 Итак, правильный ответ: имена в zip-архиве,созданном под виндой были закодированы в cp866 У модуля IO::Compress (из которого IO::Uncompress::Unzip) есть задача в трекере на этот счёт https://github.com/pmqs/IO-Compress/issues/16, но движения по ней нет. Может у вас есть идеи, как это можно реализовать, а соберу патч автору?
Обсуждают сегодня