Распаковка в Unix ZIP-архива созданного в Windows

Главные вкладки

Аватар пользователя pachkow@drupal.org pachkow@drupal.org 4 мая 2009 в 11:10

Задача: Осуществлять пакетную загрузку файлов на сайт в виде ZIP-архива. После закачки архив распаковать и обработать вложенные файлы. Имена файлов в архиве могут быть содержать русские буквы.

Проблема: При распаковке ZIP-архивов содержащих файлы с русскими именами в Unix-подобных системах получаются файлы с нечитабельными (и не пригодными для дальнейшего использования) именами. Причем это относится к архивам, созданным в ОС Windows.

Рисунок 1 – Имена распакованных файлов: правильный и искаженный.

Одно из возможных решений данной проблемы: устанавливаем программу convmv. Находим для своей операционной системы пакет и устанавливаем его:

rpm -Uvh /home/user1/convmv-1.10-1.el5.noarch.rpm

Теперь команды распаковки архивов будут следующими:

unzip example.zip
convmv --notest -r -f cp-1252 -t cp-850 ./example &> /dev/null
convmv --notest -r -f cp-866 -t utf-8 ./example &> /dev/null

Данная инструкция проверялась на CentOS 5 в модуле Acidfree (осуществляется массовый импорт фотографий в альбом из ZIP-архива).

Комментарии

Аватар пользователя Ильич Рамирес Санчес Ильич Рамирес Санчес 4 мая 2009 в 12:06

нормальные люди шифрут имена файлов картинок и вообще файлов в md5 - если идет их автоматизированная обработка.
и не имеют проблем.

умные владельцы сайтов не держат файлы с русскими именами и тоже проблем не имеют.

Локали везде могут круто отличаться. и вы можете не знать в какой из них пашет apache или php.

Русские имена файлов на сервере - дурной тон.

Аватар пользователя axel axel 4 мая 2009 в 18:45

Ilya1st wrote:
нормальные люди шифрут имена файлов картинок и вообще файлов в md5 - если идет их автоматизированная обработка.
и не имеют проблем.

умные владельцы сайтов не держат файлы с русскими именами и тоже проблем не имеют.

Локали везде могут круто отличаться. и вы можете не знать в какой из них пашет apache или php.

Русские имена файлов на сервере - дурной тон.

На сервере и десткопе - utf8, никаких проблем с русскими именами. А для архаичных утилит windows, пакующих в cp1251 - конверторы необходимы, пока ms не мигрируют лет через 10 полностью на юникод.

Аватар пользователя pachkow@drupal.org pachkow@drupal.org 4 мая 2009 в 14:04

Просто пользователи могут запаковать в архив файлы с любыми именами (в том числе и с русскими). Всех не заставишь делать правильно.
А распаковывать в любом случае надо, а потом уже можно переименовывать файлы.

Аватар пользователя PVasili PVasili 4 мая 2009 в 19:52

"axel" wrote:
пока ms не мигрируют лет через 10 полностью на юникод.
- давно уже мигрировала.
Кто не обновил софт 10 летней давности - в чём проблемы Wink

Аватар пользователя axel axel 4 мая 2009 в 22:48

PVasili wrote:
- давно уже мигрировала.
Кто не обновил софт 10 летней давности - в чём проблемы ;)
И почему мы тогда обсуждаем здесь тему конвертации из cp1251? Smile Я в курсе, что в windows используется юникод, но только там немало мест где живут для совместимости другие кодировки - в русской windows можно найти даже cp866. Проблема с архивами ведь не на пустом месте вылезла.

Аватар пользователя andron13@drupal.org andron13@drupal.org 4 мая 2009 в 23:06

а может мне кто нибудь обьяснить что этот материал делает на главной? Wink
если человек не может распаковать зипархив, то друпалом ему ранозаниматься. бред. морда засрана всяким гавном. материалов в тему друпала нет вообще. где те поборники чистоты морды друпала.ру?

Аватар пользователя PVasili PVasili 4 мая 2009 в 23:14

Кстати, да кто на главную вывесил?

"axel" wrote:
Проблема с архивами ведь не на пустом месте вылезла.
я же писал в чём проблема...
Кодировки ни кому не мешают. Весь древний совет живет в музее спокойно. Я ни разу не сталкивался с такими проблемами Smile

Аватар пользователя pachkow@drupal.org pachkow@drupal.org 5 мая 2009 в 7:58

beerman wrote:
при закачке файла на серв использовать transliteration.module вера не позволяет?

Пробывал, не помогает, так как файлы с русскими именами находятся внутри архива.