Дабы обновить форум, предлагаю обсудить данную тему. В частности, меня интересует, можем ли мы (русскоязычное сообщество) что-то сделать, чтобы у русских пользователей openSUSE не возникало такой проблемы? Что имеется в виду: в среде GNOME zip-архивы по умолчанию открываются File Roller-ом и если архив запаковывался под windows, то русские буквы в архиве отображаются неверно и, как правило, файлы из архива распаковать нельзя. То же самое верно и в обратном случае, если запаковать архив в openSUSE и открывать архив в windows, то русские имена файлов тоже не читаются. Тема год назад уже поднималась здесь](http://linuxforum.ru/index.php?showtopic=58492): в общем-то, понятно, что происходит, и там были даны ссылки на сторонние обсуждения. Но вот нормального решения нет. Очень бы хотелось, чтобы корректная поддержка русского была из коробки, уже есть созданный баг https://bugzilla.novell.com/show_bug.cgi?id=540598, но что-то по этому поводу никаких движений нет. Может быть, проголосовать всем за этот баг, или есть какие-нибудь другие способы продвинуть решение проблемы? Можно, конечно, собрать свой вариант пакета, уже пропатченый, но всё-таки хотелось бы добиться, чтобы всё нормально работало “из коробки”. Да и кто этот пропатченый пакет будет ставить?
а у вас есть патч?
Получил репродюсер посмотрим. Можно ли пропихнуть бибилиотеку.
Простите, а данный баг только в Гноме?
У меня в KDE, Ark всё распаковывает нормально.
К тому же поставил Q7z и unrar. Нет никаких проблем.
Нет везде где используется для распаковки unzip. Кстати в Q7z насколько мне известно присутствует таже проблема. Ark и file-roller всего лишь GUI и опять же насколько мне известно Ark имена сам не конвертит а выдает то что ему архиватор дал.
Возможно вы не правильно проверяли. Если архив создать в линуксе то с русским будет все нормально. Но архив надо создать в винде, а открывать его пытаться в линкусе.
По проблеме, нашел два патча первый от altlinux второй из проекта RusXMMS, из альта не очень подходит так как там нет автодетекта кодировки и возникает таже проблема но уже с линуксовыми архивами. От RusXMMS должен работать правильно но я так и не сумел собрать unzip с этим патчем для openSUSE.
А где можно взять патч от RusXMMS?
Сайт проекта RUSXMMS
Для применения патчей нужны их билиотеки LibRCD и LibRCC в официальных репозиториях openSUSE их нет. У меня библиотеки собрать получилось. Есть в моем home репозитории. Сам патч брал отсюда Index of /files/rusxmms/patches на сайте проекта есть ссылка.
Оп-паньки! И правда не получается zip-ы распаковать.
Правда один нюанс:
И Ark и все модули, прикрученные к Крусадеру, называют распакованные файлы кракозяблами, вопросительными знаками, квадратиками и файлы эти просмотреть затруднительно.
А вот Q7Z при распаковке имена делает набором спецсиволов (кракозяблами), но файлы доступны для просмотра и редактирования.
Я один раз распаковал такой файл, так потом удалить не мог штатными средствами.
Ага, я тоже не могу удалить. Только то, что Q7z распаковывал - удаляется. То, что унраром - нет.
Ну, я в итоге-то удалил, по номеру инода.
ls -il <file>
# в первом поле будет номер inode
find -inum <inode> -delete
А я рекурсивно каталог удалил, благо создавал его специально для этого дела (полезная привычка оказалась )
Удаление это уже дело десятое. Основная проблема в том что имя файла в неверной кодировке. Вкратце о проблема, что смог узнать из всевозможный источников. Архивы zip (отличии от rar и других) изначально не хранят никакой информации о кодировке в которой сохранено имя файла. Насколько я понял официально только латиница. Но архиваторы на это не смотрят и сохраняют имена в системной кодировке в винде CP1251, а под линуксом юникод. Но проблема в том что архиватор который распаковывает архив узнать какая кодировка не может никак, так как инфы о кодировке в архиве нет. Вот и получается что винда не может читать линуксовые архивы с русскими буквами а линукс виндовые. У ALTLinux есть патчи который они используют в своей системе, они просто приняли что все архивы в виндовой кодировке. И соответственно при открытии архива без вопросов конвертируют имена из виндовой в юникод, а при архивации из юникода в виндовую. Но при таком подходе не будут открываться архивы созданные под линкусом с непропатченным архиватором. Не очень хороший подход, но простой. И у меня работает. В патче от rusxmms вроде как есть авто-определение кодировки, то есть теоретически патч может угадать в какой кодировке сохранены имена и правильно распаковать. Но вот проверить это не смог.
У меня совсем небольшой опыт в сборке пакетов, и собрать unzip с патчем не получилось, если кто может помогите собрать. Если удаться проверить что данный патч корректно работает может быть получится его продвинуть в официальную сборку.
Я попробую собрать этот пакет. Пока всё не доходят руки.
У меня тоже не компилируется в 11.2. Думаю, что это связано с GCC 4.4. Почему-то не линкуется библиотека.
Отписал на форуме darksoft и выложил src-пакет.
В 11.1 собрался нормально и работает. Что очень радует.
дык ето. Того. Баг есть патч есть. Комментить и просить меинтенанс апдейт минимум для 11.1 + можно попросить помоши с компиляцией по 11.2
Дело в том, что там задействована дополнительная библиотека, даже две. Так что не всё так просто.
Библиотеки сторонние.
Lazy_Kent спасибо. Не заметил кстати что у меня тоже для 11.1 в билд сервисе собралось Все пытался под 11.2 локально собрать, А на сервер загнал чтобы помощи попросить. Кстати там в спеке отключены openSUSE-шные патчи, меня для начала интересовало как этот патч будет работать. Поставил пакет от 11.1 на 11.2 все действительно правильно работает, корректно открываются и виндовые и линуксовые архивы.
Я там кое-что немного изменил. Прикладываю спек.
И патч подправил в плане совпадения строк
unzip-ds-unixenc.patch
Index: unzpriv.h
===================================================================
--- unzpriv.h.orig 2010-03-08 00:48:58.000000000 +0300
+++ unzpriv.h 2010-03-08 00:50:08.000000000 +0300
@@ -2582,6 +2582,7 @@ char *GetLoadPath OF((__GPRO));
!(((islochdr) || (isuxatt)) && \
((hostver) == 25 || (hostver) == 26 || (hostver) == 40))) || \
(hostnum) == FS_HPFS_ || \
+ (hostnum) == UNIX_ || \
((hostnum) == FS_NTFS_ && (hostver) == 50)) { \
_DS_OEM_INTERN((string)); \
} else { \
Этот патч фиксит проблему? Вы знаете email майнтейнера?