LINUX.ORG.RU

Unzip без кракозябров в именах файлов

 


4

3

в Windows нормально разворачивается

а как это сделать в Linux?

unzip создает файл с именем типа:
�� ��� Ļ��᡿� �ӫ��Ἴ���� ���߻��ѡ��.xxx

пишут, что для преобразования кодировки можно применять

convmv -r -f кодировка1 -t кодировка2 *

например
convmv -r -f windows-1251 -t utf8 *

но не пойму в какой кодировке оно завернуто изначально, как это определить?

пробовал koi8r, cp866, windows-1251
не помогло

вот еще по теме:
https://allencch.wordpress.com/2013/04/15/extracting-files-from-zip-which-con...

сделать бы по аналогии

★★

в этом твоём файле — есть что-то секретное?

если секретного нет — можешь пожалуйста на него сылку скинуть (я просто протестю как работает моя микро-утилита «locale-unzip» для раззипоски — на этом файле)

если секретно есть.. то тогда ладно, послушаем других комментаторов..

в Windows нормально разворачивается

если в *русскоязычной* венде файл нормально разварачивается.. то думаю буду должно работать как:

locale-unzip cp866 /путь/к/файлу.zip

# P.S.: или если не очень сложно (и например в файле есть что-то сектретное) проверь пожалуйста на своеё стороне — https://github.com/polymorphm/locale-unzip/releases .. я был бы очень тебе благодарен за это :)

user_id_68054 ★★★★★
()
Последнее исправление: user_id_68054 (всего исправлений: 3)
Ответ на: комментарий от sanyock

Ты не до конца прочитал.

Собрать unzip с флагом natspec. Ну или доустановить соответствующие либы, если бинарный дистрибутив.

Я в таких случаях раньше всегда бинарники из zip или unzip пакета от ALTLinux тащил к себе :) Там все уже сделано было.

Либо внимательно читать здесь:

p7zip для zip-архивов с кириллицей через engrampa

Либо

7z же нормально распаковывает, корректируя кодировку имен enca'й.

greenman ★★★★★
()
Последнее исправление: greenman (всего исправлений: 2)

Если unzip собран в твоём дистрибутиве с поддержкой natspec, то распаковываться всё будет нормально, в правильной кодировке. Кроме всего прочего, 100% правильно будет распаковываться в консоли, т.е. 'unzip arive.zip', а вот при использовании оболочек из состава DE могут быть нюансы.

kostik87 ★★★★★
()
Ответ на: комментарий от sanyock

Соберите сами. А так, вроде бы unzip статически не соберётся.

kostik87 ★★★★★
()
Ответ на: комментарий от sanyock
Ответ на: комментарий от greenman

Ещё вариант

http://www.sakryukin.ru//index.php?module=articles&c=articles&b=8&amp...

спасиб за статью!

в статье даны тестовые zip-файлы.. и как раз мне (для проверки «locale-unzip») — не хватало этих всяких разных тестовых файлов..

проверил Вендовые варианты — работают все три:

[regular-user@localhost x]$ ~/my_projects/locale-unzip.project/locale-unzip/locale-unzip cp866 zip_iz-pod_winzip.zip
unzipping: 'каталог по русски/'
dir: 'каталог по русски'
unzipping: 'каталог по русски/файл на русском внутри каталога.doc'
writed: 'каталог по русски/файл на русском внутри каталога.doc'
unzipping: 'файл на русском рядом с каталогом.doc'
writed: 'файл на русском рядом с каталогом.doc'

[regular-user@localhost x]$ ~/my_projects/locale-unzip.project/locale-unzip/locale-unzip cp866 zip_iz-pod_wirar.zip
unzipping: 'каталог по русски/'
dir: 'каталог по русски'
unzipping: 'каталог по русски/файл на русском внутри каталога.doc'
writed: 'каталог по русски/файл на русском внутри каталога.doc'
unzipping: 'файл на русском рядом с каталогом.doc'
writed: 'файл на русском рядом с каталогом.doc'

[regular-user@localhost x]$ ~/my_projects/locale-unzip.project/locale-unzip/locale-unzip cp866 zip_iz-pod_zip-papki-windows.zip
unzipping: 'каталог по русски/файл на русском внутри каталога.doc'
writed: 'каталог по русски/файл на русском внутри каталога.doc'
unzipping: 'файл на русском рядом с каталогом.doc'
writed: 'файл на русском рядом с каталогом.doc'

хотя с линуксовскими zip-файлами — похоже у автора что-то не так :) .. один(*) из них не открывается даже в Линуксовском обычном архивном манагере..

greenman, не знаешь что с этим файлом ( «zip-архив из-под Debian-6 Squeeze» (*) ) может быть? как он его сделал таким странным?

user_id_68054 ★★★★★
()
Последнее исправление: user_id_68054 (всего исправлений: 7)
Ответ на: комментарий от user_id_68054

У себя проблем не вижу

$ unzip zip_iz-pod_squeeze.zip 
Archive:  zip_iz-pod_squeeze.zip
   creating: Тест зипа из-под Linux/
 extracting: Тест зипа из-под Linux/Тест зипа  

unzip-natspec

greenman ★★★★★
()
Последнее исправление: greenman (всего исправлений: 1)
Ответ на: комментарий от greenman

не знаешь что с этим файлом ( «zip-архив из-под Debian-6 Squeeze» ) может быть? как он его сделал таким странным?

есть подозрение что там внутри zip-архива присутствуют биты 0x800 в flag_bits ...

...что по спецификации указывает что имя-файла закодировано в UTF-8 (а UTF-8 там на самом деле ни какого нет :))

user_id_68054 ★★★★★
()
Ответ на: комментарий от greenman

проверил unzip-natspec (для этого — установил libnatspec и unzip-i18n )

смотрим:

$ unzip zip_iz-pod_squeeze.zip 
Archive:  zip_iz-pod_squeeze.zip
   creating: ÆÑßÔ º¿»á ¿º-»«ñ Linux/
 extracting: ÆÑßÔ º¿»á ¿º-»«ñ Linux/ÆÑßÔ º¿»á

оно и логично — ведь откуда знать разорхиватору что файлы внутри нахоятся на русском :-)

теперь, пробум чуть подругому (но тоже через natspec ) :

$ LANG=ru_RU.utf-8 unzip zip_iz-pod_squeeze.zip 
Archive:  zip_iz-pod_squeeze.zip
   creating: Тест зипа из-под Linux/
 extracting: Тест зипа из-под Linux/Тест зипа

так заработало :-)

однако для меня остаётся приоритетной версия, что внутри «zip_iz-pod_squeeze.zip» указан флаг UTF-8 без наличия самого UTF-8

user_id_68054 ★★★★★
()
Последнее исправление: user_id_68054 (всего исправлений: 4)
Ответ на: комментарий от sanyock

Я тоже. И решение тоже на ЛОРе нашёл не так давно :)

lampslave ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.