|
|
3.7, Natrio (?), 08:36, 01/12/2010 [^] [^^] [^^^] [ответить]
| +/– |
Многие уже пробовали "закинуть" подобные патчи в мэйнстрим Info-ZIP, но их либо отклоняли, либо удаляли в следующей версии. Разработчики Info-ZIP занимаются новой версией формата, рассматривая его как предпочтительный. Авторам же патчей ZIP требуется лишь для совместимости, а для всего остального у них есть другие архиваторы. Взаимопонимания в такой ситуации достичь сложно.
Тем более с моим английским ;)
| |
|
2.9, john (??), 11:17, 01/12/2010 [^] [^^] [^^^] [ответить]
| +/– |
При распаковке имена на русском
zipinfo - дает абракадабру или набор '?????'
| |
|
3.10, Natrio (?), 11:27, 01/12/2010 [^] [^^] [^^^] [ответить]
| +/– |
Оригинальные unzip и zipinfo, будучи собранными с опциями по умолчанию, при выводе в консоль заменяю вопросительными знаками всё, что выходит на пределы ASCII. Есть опция NO_SETLOCALE, которая снимает блокировку, и в моём патче эта опция включена.
Оригинальный zip при упаковке файлов выводит их имена в консоль в кодировке архива, то есть неправильно. В моём патче это исправлено, и имена выводятся в консоль без изменений.
| |
|
4.12, john (??), 13:08, 01/12/2010 [^] [^^] [^^^] [ответить]
| +/– |
> Оригинальные unzip и zipinfo, будучи собранными с опциями по умолчанию, при выводе
> в консоль заменяю вопросительными знаками всё, что выходит на пределы ASCII.
> Есть опция NO_SETLOCALE, которая снимает блокировку, и в моём патче эта
> опция включена.
> Оригинальный zip при упаковке файлов выводит их имена в консоль в кодировке
> архива, то есть неправильно. В моём патче это исправлено, и имена
> выводятся в консоль без изменений.
Да, это работает - большое спасибо!
| |
|
|
2.33, sanek (??), 15:04, 12/12/2010 [^] [^^] [^^^] [ответить]
| +/– |
Zip & русские имена, поможем решить этот баг? Нужна ваша помощь!
Ребята, многие из вас любят голосовать и так далее, я предлагаю вам сделать полезную для всего сообщества вещь. Необходимо будет потратить всего лишь пару минут на регистрацию и зарегистрироваться на оф. ресурсе
https://launchpad.net/
И проголосовать вот за решение этого бага:
Проголосовать можно здесь:
https://bugs.launchpad.net/ubuntu/+source/unzip/+bug/580961
Учитывая что там в баге в комментах идёт мощный срач, просьба НИЧЕГО там не писать, просто нажать ссылку
Does this bug affect you? И выбрать в выпадающем меню
Yes, it affects me
Я уже проголосовал. Ссылка на форум откуда взято- http://forum.ubuntu.ru/index.php?topic=124286.0
| |
|
1.2, Аноним (-), 23:35, 30/11/2010 [ответить] [﹢﹢﹢] [ · · · ]
| +/– |
Можно просто распаковать в корень уже собранные пакеты unzip от альта с того же сизифа.
| |
|
2.6, Natrio (?), 08:28, 01/12/2010 [^] [^^] [^^^] [ответить]
| +/– |
Я очень благодарен авторам патчей из AltLinux, и я дал ссылки на оригинал.
Однако мне пришлось добавить кое-что от себя, чтобы zip и unzip не только правильно обрабатывали файлы, но и правильно выводили имена в консоли. В тексте даны уже мои патчи, сделанные на основе оригинальных.
| |
|
|
2.4, iZEN (ok), 02:24, 01/12/2010 [^] [^^] [^^^] [ответить]
| +/– |
Ношу ZIP-архивы с русскими именами файлов, сделанные под Windows, на работу. Там распаковываю, пакую в 7-Zip и приношу домой. :)
| |
2.8, Natrio (?), 08:49, 01/12/2010 [^] [^^] [^^^] [ответить]
| +/– |
Я могу отказаться от ZIP, но не могу заставить отказаться от него тех, кто приносит/присылает/выкладывает такие архивы, а также тех, у кого никакие другие просто не откроются. ZIP нужен именно для этого.
| |
2.22, vovans (ok), 21:51, 02/12/2010 [^] [^^] [^^^] [ответить]
| +/– |
конечно, можно ля-лякать, если с реальными людьми не общаешься... Но задолбёшься каждому объяснять... Не стоит на пустом месте раздражаться и раздражать других. Если есть возможность в течении нескольких минут исправить ситуацию раз и надолго, то нечего мозги компостировать себе и людям.
| |
|
1.13, Andrey Mitrofanov (?), 14:08, 01/12/2010 [ответить] [﹢﹢﹢] [ · · · ]
| +/– |
>| iconv -f cp1252 -t cp850 | iconv -f cp866
Вариант:
|recode lat1..850,866..
, может быть,
|recode -f lat1..850,866..
, если будет на чём спотыкаться.
unzip -l $file |recode -f 8859-1..850,866..
-работает, теперь ждём Совета, какой recode нужен для
7z l $file | ....
:)
| |
|
2.14, Natrio (?), 14:45, 01/12/2010 [^] [^^] [^^^] [ответить]
| +/– |
Нет, у 7z со своими и раровскими архивами всё нормально. А вот зип он распаковывает своеобразно – имена в кодировке cp866, но с лишним левым байтом перед каждым символом.
Но это всё костыли. Я перед тем, как занялся патчами, сам соорудил два работающих скрипта – один для переименования после распаковки, другой с распаковкой через трубу и сохранение в файле с перекодированным именем. Первый вариант требует заранее подготовить пустой каталог (а в норме unzip распаковывает файлы в любой), второй вариант сопровождается потерей всех даты и времени всех файлов, что тоже не всегда хорошо. И оба совершенно негибкие.
| |
2.15, Natrio (?), 15:48, 01/12/2010 [^] [^^] [^^^] [ответить]
| +/– |
По уточнённым данным, 7z (p7zip) под Linux начинает распаковывать zip–архивы в неискаженной кодировке cp866, если указать ему ключ -no-utf16 или установить переменную LC_CTYPE в любое значение, отличное от пустой строки.
| |
|
|
4.38, sergey (??), 13:45, 16/12/2010 [^] [^^] [^^^] [ответить]
| +1 +/– |
7z l -no-utf16 <fname>.zip | iconv -f cp866
толькочо проверил
| |
|
|
|
1.18, мше (?), 08:53, 02/12/2010 [ответить] [﹢﹢﹢] [ · · · ]
| +/– |
> более "продвинутые" форматы архивов
(RAR, 7zip) тоже как-то решают эту проблему;
нифига они не решают. вон у меня щас лежит rar, который даже не распаковывается
| |
|
2.19, Natrio (?), 09:18, 02/12/2010 [^] [^^] [^^^] [ответить]
| +/– |
Чем именно не распаковывается?
Последнее время появилась новая модификация архивов .rar, и для их распаковки нужна новая версия unrar. Если вы пользуетесь p7zip, то в него она включена, кажется, с 9й версии. Не спрашивайте меня, зачем разработчики winrar это сделали – вопрос к ним :)
Но к кодировкам всё это отношения не имеет. Не буду говорить за всех, но с 9й версией p7zip у меня не возникает проблем с распаковкой созданных в Windows .rar и .7z архивов, а созданные им под Linux архивы .7z нормально открываются 7zip под Windows.
| |
|
1.20, fank (?), 13:10, 02/12/2010 [ответить] [﹢﹢﹢] [ · · · ]
| +/– |
о, сколько лисапетов сразу
rusxmms.sf.net
удивитесь, как грамотные люди давным давно решили все эти проблемы
| |
|
|
3.24, fank (?), 18:48, 03/12/2010 [^] [^^] [^^^] [ответить]
| +/– |
> ЗдОрово! А патчи для unzip-6.0 и zip-3.0 уже есть?
сарказм? (С) Sheldon Cooper
видимо, перцу, что это написал, надоело упрашивать дубоватых иностранцев и каждому объяснять, что за зоопарк местные девелоперы изобрели - патчи там скорее всего устарели, но все они описаны и не думаю, что сильно сложно допинать их для новых версий
заявляется, что патчится все в несколько строк кода
| |
|
|
1.27, ананим (?), 23:54, 08/12/2010 [ответить] [﹢﹢﹢] [ · · · ]
| +/– |
предпочитаю использовать fuse-zip - man fuse-zip
fuse-zip - a FUSE filesystem for zip archives with write support
....
If you want to specify character set conversion for file names in archive, use the following fusermount options:
-omodules=iconv,from_code=$charset1,to_code=$charset2
....
DESCRIPTION
fuse-zip is a fuse filesystem, that enables any program to work with a ZIP archive as though it is a plain directory. Unlike KIO or Gnome VFS, it can be used in any application without modifications.
Unlike other FUSE filesystems, only fuse-zip provides write support to ZIP archives. Also, fuse-zip is faster that all known implementations on large archives with many files.
| |
1.28, autopilot (?), 11:47, 10/12/2010 [ответить] [﹢﹢﹢] [ · · · ]
| +/– |
Debian 4 Etch + unzip-5.52-9etch1
на хостинге при распаковке кодировка битая, однако это фиксится в php, кроме одной вредной буквы 'Ш'-большая, которая, как выяснилось, просто проглатывается в процессе распаковки.
В листинге же эта буква остается.
Случайно выяснилось, когда залили архив с файликом городка "Шахунья.jpg".
Рекомендую для проверки патчей и локалей обратить на это внимание.
| |
|
2.31, Natrio (?), 09:52, 11/12/2010 [^] [^^] [^^^] [ответить]
| +/– |
Чуть выше я уже писал, что unzip/zipinfo, собранный без опции NO_SETLOCALE, при выводе в консоль заменяет все не-ASCII символы вопросительными знаками. Мой патч к unzip
http://pda.opennet.ru/soft/zip_rus/unzip60-natspec-mod.diff.gz
как раз и отличается от альтовского патча включением этой опции. Другой способ её включить – задать для сборки unzip переменную окружения
LOCAL_UNZIP="-DNO_SETLOCALE"
Опции -I и -O нужны ТОЛЬКО для случаев, когда вам требуется задать кодировки отличные от тех, что выдаёт natspec. Если кодировка архива совпадает с определённой natspec DOS-кодировкой, то никаких дополнительных ключей не требуется:
$ unzip -l ../test.zip
Archive: ../test.zip
Length Date Time Name
--------- ---------- ----- ----
0 12-03-2010 21:23 тест/
7 12-03-2010 21:23 тест/эюя
7 12-03-2010 21:23 тест/абв
17 12-10-2010 11:49 Шах и мат.txt
--------- -------
31 4 files
| |
|
1.32, Forth (??), 14:55, 12/12/2010 [ответить] [﹢﹢﹢] [ · · · ]
| +/– |
Использую ваш патч, в unzip появились опции -I и -O и все равно вопросики в консоли. :(
Система - Fedora 14. Где копать?
| |
|
2.34, Natrio (?), 09:14, 13/12/2010 [^] [^^] [^^^] [ответить]
| +/– |
Нет у меня федоры, проверить не могу. Могу подсказать следующее:
1) Мой патч
http://www.opennet.me/soft/zip_rus/unzip60-natspec-mod.diff.gz
должен накладываться на оригинальный unzip-6.0 :
ftp://ftp.info-zip.org/pub/infozip/src/unzip60.tgz
2) В моём патче включена опция NO_SETLOCALE. Если это так, она должна присутствовать в выводе команды сборки. То есть, после
make -f unix/Makefile generic_gcc
в выводе должно часто присутствовать -DNO_SETLOCALE
Если нет – значит сборка идёт как-то неправильно, или наложенный патч – не мой.
3) После сборки с моим патчем unzip устанавливается в /usr/bin/
Возможно, у вас уже установлена другая версия в /usr/local/bin/ , которая обычно имеет более высокий приоритет в переменной $PATH. Если это так, то одна из версий явно лишняя.
| |
2.35, Natrio (?), 09:17, 13/12/2010 [^] [^^] [^^^] [ответить]
| +/– |
4) Вопросики только в консоли? Имена распакованных файлов правильные?
| |
|
1.36, Yo (??), 13:56, 13/12/2010 [ответить] [﹢﹢﹢] [ · · · ]
| +/– |
# можно и так:
zipinfo -1 my.zip | while read z
do u=$(echo "$z"|iconv -f cp866)
unzip my.zip "$z" && mv -i "$z" "$u"
done
| |
|
2.37, Natrio (?), 08:43, 14/12/2010 [^] [^^] [^^^] [ответить]
| +/– |
Не получится.
1) Непатченный unzip/zipinfo выводит имена с перекодировкой cp850 => cp1252. Поэтому в вашем примере надо сначала обратить её, а потом уже переводить из cp866 :
iconv -f cp1252 -t cp850 | iconv -f cp866
подробности в статье выше.
2) Во многих дистрибутивах unzip/zipinfo собран БЕЗ опции NO_SETLOCALE, и потому будет выводить в консоль все имена в виде "?????". Перекодировка после этого, естественно, уже невозможна.
| |
|
1.39, pva0xd (ok), 17:38, 23/12/2010 [ответить] [﹢﹢﹢] [ · · · ]
| +/– |
Natrio, а не могли бы вы пояснить в каких случаях нужена опция -K? И вообще зачем изменёно умолчание для dosify?
| |
|
2.41, Natrio (?), 12:55, 24/12/2010 [^] [^^] [^^^] [ответить]
| +/– |
Опция -K обратна опции -k, то есть отключает "dosify".
Умолчание изменено для совместимости с win-програмами. В частности, TotalCоmmander не видит русских имён файлов, если архив упакован БЕЗ опции dosify.
| |
|
1.40, RUR (?), 12:51, 24/12/2010 [ответить] [﹢﹢﹢] [ · · · ]
| +/– |
По мотивам Yo, создаём бат файл:
echo 'zipinfo -1 $1 | while read z; do u=$(echo "$z"|iconv -f cp1252 -t cp850|iconv -f cp866); unzip $1 "$z" && mv -i "$z" "$u"; done' > brusunzip
chmod +x brusunzip
brusunzip my.zip
| |
|
2.42, Natrio (?), 13:01, 24/12/2010 [^] [^^] [^^^] [ответить]
| +/– |
Я начинал именно с таких скриптов, только получаются они очень неуклюжими. Кроме того, zipinfo, будучи собранным без дополнительных опций (у меня так и было), НЕ ВЫВОДИТ русские имена в консоль, заменяя их на ?????, то есть эти скрипты на половине систем не будут работать без пересборки пакета unzip. А если уж пересобирать, то я решил лучше пропатчить и больше не мучаться со скриптами.
| |
|
1.43, lucentcode (ok), 01:49, 07/04/2011 [ответить] [﹢﹢﹢] [ · · · ]
| –1 +/– |
C unzip 6.0.1 вы можете использовать опцию -O cp866 когда надо распаковать файл, пожатый в windows.
| |
|
2.44, aleks (??), 23:10, 03/03/2012 [^] [^^] [^^^] [ответить]
| +/– |
> C unzip 6.0.1 вы можете использовать опцию -O cp866 когда надо распаковать
> файл, пожатый в windows.
В ман не нашел такой опции
| |
|
1.45, aleks (??), 23:13, 03/03/2012 [ответить] [﹢﹢﹢] [ · · · ]
| +/– |
Ну и в догонку под bsd 7.3 отлично работает такой способ например:
7z e -no-utf16 jtv.zip
convmv -f cp866 -t koi8-r * --notest
| |
|
2.46, Natrio (?), 23:37, 03/03/2012 [^] [^^] [^^^] [ответить]
| +/– |
Возможно, но статья не об этом, а о том, как НОРМАЛЬНО работать в *nix с ОБЫЧНЫМИ, то есть DOS/Win zip-архивами.
| |
|
3.47, aleks (??), 02:10, 04/03/2012 [^] [^^] [^^^] [ответить]
| +/– |
Ок, поясню.
В приведенном мною примере jtv.zip архив тот самый виндовый архив,
при распаковке unzipом оного можно увидеть кривую кодировку названий файлов.
Приведенный мною пример как раз показывает как можно НОРМАЛЬНО работать с такими архивами.
| |
|
|
5.49, aleks (??), 20:32, 04/03/2012 [^] [^^] [^^^] [ответить]
| +/– |
Эта статья как раз из серии "а мыши кололись, плакали, но продолжали жрать кактус" как ни посмотри.
> В статье предлагается пропатчить zip и unzip, чтобы имена файлов всегда правильно
> упаковывались и распаковывались.
Да вот это и есть костыли. ППЦ сделать костыли для костылей. Зачем?
Есть нормальный продукт 7z где уже из "коропки" все распаковывается и тут же можно перевести в нужную кодировку, замечу без всяких патчей и прочей заумной мути.
Просто написать одну строчку и вуаля. Куда проще то?
Нет, конечно, можно с умным видом ложить патчи какие-то чето там пересобирать и еще держать в уме а как же на других серваках не забыть потом это все проделать или помнить... Бред.
Не работает это глюкалово unzip ну и нафиг его есть другие инструменты которые могут это сделать быстро и парой команд.
| |
|
|
|
|
1.50, Ю.Т. (?), 13:37, 15/12/2012 [ответить] [﹢﹢﹢] [ · · · ] | +/– | Да, это полезный совет Всё верно Пока существуют винды и WinZip и InfoZip,... большой текст свёрнут, показать | |
|
2.51, Natrio (?), 14:05, 15/12/2012 [^] [^^] [^^^] [ответить]
| +/– |
Не так уж всё и сложно :)
Что касается "сопровождения", то дистрибутивы, как правило, позволяют собирать не только вручную, но и собирать пакеты, или подключать сторонние репозитории.
После установки пакетов их "сопровождение" ничем не отличается от всех прочих, а работа с ними – от работы со оригинальными zip и unzip, независимо от программ, которые их вызывают.
Для себя в ArchLinux я собрал пакеты, заменяющие zip и unzip, и положил в AUR:
http://aur.archlinux.org/packages/zip-natspec/
http://aur.archlinux.org/packages/unzip-natspec/
Для Убунты (к Дебиану тоже подходят) мои пакеты собрали без меня :)
http://launchpad.net/~frol/+archive/zip-i18n
Насчёт других дистров не знаю, но в случае чего можно поступить аналогично.
А кодировку libnatspec определяет самостоятельно, на основе языка локали. Если запустить с другой локалью, будет выбрана другая кодировка.
Юникодные архивы альтернативного формата infozip будут распаковываться как обычно, на это патчи не влияют.
| |
|
3.52, Ю.Т. (?), 14:33, 15/12/2012 [^] [^^] [^^^] [ответить]
| +/– |
> Не так уж всё и сложно :)
> Что касается "сопровождения", то дистрибутивы, как правило, позволяют собирать не только
> вручную, но и собирать пакеты, или подключать сторонние репозитории.
> После установки пакетов их "сопровождение" ничем не отличается от всех прочих, а
> работа с ними – от работы со оригинальными zip и unzip,
> независимо от программ, которые их вызывают.
...
Ну-с, что кому кажется сложным или простым, тема вечная. По-моему, основывать решение на доп. библиотеке, которая угадывает (!) кодировку, это уже ошибка. А не угадает, тогда как? Или вот тут предлагали: то шелл-скрипты, то в два действия архив раскрывать.
Да вообще работа со сложно-уложенной информацией в консоли это скорее упражнение в йоге, но не работа. :)
| |
|
|
1.54, uropb (??), 15:45, 21/01/2015 [ответить] [﹢﹢﹢] [ · · · ]
| +/– |
Для меня лично наиболее удобным оказался вариант с mc. Миднайт командер, оказывается, нормально заходит в архивы с русскими именами. При копировании из архива в нужную директорию русские имена сохраняются. И никаких патчей.
| |
1.55, x230 (ok), 16:47, 21/06/2020 [ответить] [﹢﹢﹢] [ · · · ]
| +/– |
В Manjaro KDE (в dolphin) такая проблема решилась после того, как я сделал следующее:
# Удалил:
zip
unzip
# Установил:
zip-natspec
unzip-natspec
libnatspec
| |
1.57, Лев (?), 18:30, 05/09/2020 [ответить] [﹢﹢﹢] [ · · · ]
| +/– |
Привет из будущего! Столкнулся с этой столетней проблемой, когда запускал unzip по SSH через PHP из-под WSL Win10 😳 Оказалось, что локаль консоли удаленного хоста зависит от локали локального хоста (и от настроек SSH), поэтому у меня при подключении из-под Windows была локаль C.UTF-8, а из-под соседних linux'ов en_US.UTF-8, и соответственно из-под linux все было нормально, имена файлов после unzip отображались корректно, а из-под windows - знаки вопроса.
Так что достаточно просто поменять локаль на en_US.UTF-8 или ru_RU.UTF-8. Надеюсь кому-то поможет.
php -r "print_r(shell_exec(\"ssh user@host 'LANG=ru_RU.utf8 && unzip filename.zip'\"));"
| |
1.58, Аноним (56), 14:48, 12/10/2020 [ответить] [﹢﹢﹢] [ · · · ] | +/– | Удивительно, насколько ни один из архиваторов в ключая unzip на linux не в сос... большой текст свёрнут, показать | |
|
2.59, Аноним (56), 15:15, 12/10/2020 [^] [^^] [^^^] [ответить]
| +/– |
На самом деле, алгоритм там чуууточку сложнее, ведь ещё и в ANSI зипы встречются (но чтоб без дублирования в UTF8 - исключительно редко). В скрипте ziplist это учитывается, совсем идеальный алгоритм можно подсмотреть там.
| |
|
|