Кодування імен файлів в архівах zip

Досить часто при відкритті під Лінукс архівів, що містять файли і директорії з кириличними (і взагалі будь-якими не-ASCII) назвами, виявляється, що імена файлів в них в неправильному кодуванні. Якщо такий архів розпакувати на диск, файли на диску можуть вийти з нечитабельним назвами.

Відбувається це тому, що в різних файлових системах імена файлів зберігаються в різних кодуваннях, та ще операційні системи працюють з ними по-різному, а більшість архівних форматів не передбачає зазначення кодування: яка була при упаковці, така і буде. Простіше кажучи, з історичних причин в кодуваннях імен файлів в архівах панує розгардіяш.

Проблема найчастіше виникає з файлами формату ZIP, упакованими під Windows. Власне, формати TAR, GZIP, BZIP2 і багато інших теж до цього схильні, але вони найчастіше створюються під Лінукс або на інших POSIX-сумісних платформах, а там зараз майже завжди одна і та ж кодування - UTF-8, тому проблема не проявляється.

Якщо треба розпакувати такий архів, то рішення дуже просте: треба вказати архіватор, в якому кодуванні там імена файлів. Проблема в тому, що поширені архіватори з графічним інтерфейсом такої опції не мають, програми для командного рядка зазвичай теж (в кращому випадку вона глибоко захована в документації). Тому наводимо поради, як саме потрібно діяти.

Що стосується самої кодування, то варто очікувати або UTF-16, або CP1251, або (рідко) CP866.

Додаємо репозиторій з виправленою версією архиваторов:

Оновлюємо репозиторії і пакети:

Далі встановлюємо такі пакети:

Тепер назви файлів в архівах будуть відображатися в правильному кодуванні.

Після пересборки zip і unzip з USE-прапором natspec все працює само собою. В аматорському оверлее rusxmms доступний пакет p7zip з графічним інтерфейсом для архіватора 7-Zip, в якому також поправлена ​​кодування. Для p7zip необхідно включити USE-Флах rcc, який використовується також в деяких інших пакетах даного оверлею, наприклад id3tag і mpg123.

Можна запозичити патчі unzip і libnatspec у проекту RussianFedora:

Для Gnome 2 Правити

  1. Ставимо fuse-zip
  1. створюємо директорію /.ZIP
  1. Пишемо скрипт:
  1. Робимо виконуваним і поміщаємо наприклад якщо стоїть gnome в /.gnome2/nautilus-scripts
  1. Призначаємо відкривати ZIP-архіви за допомогою цього скрипта

Як самому упаковувати файли, щоб не було проблем Правити

Проблем не буде, якщо всі імена файлів і директорій в архіві складаються виключно з латинських букв, цифр, пробілів та базової пунктуації, крім слеша (/) - слеш в іменах файлів під Лінукс неприпустимий. Якщо архів відкриватимуть під Windows, там заборонених символів більше: <.>. :. ". /. \. |.? І * [1]. Але їх і під Лінукс не рекомендується використовувати в іменах файлів, тому що в командному рядку всі ці символи мають спеціальне значення.

А також проблем не буде з форматом 7z (архіватор p7zip для Лінукс / POSIX, 7-Zip для Windows), ні під Лінукс, ні під іншими системами: архіватор при упаковці автоматично перекодує все імена файлів в UTF-8, а при розпакуванні перекодовує їх в кодування системної локалі. Формат повністю вільний і з хорошим стисненням, тому їм і рекомендується користуватися.

Зазвичай не буває проблем і з популярним форматом RAR, так як там імена файлів кодуються завжди в UTF-16. Але, по-перше, він пропріетарний: вільні архіватори його більш-менш підтримують, але з деякими версіями формату не справляються. По-друге, надходять повідомлення, що деякі архіватори для Лінукса все-таки і при роботі з RAR засікають кодування. Рекомендується користуватися 7z.

Варто зазначити, що програма zip від Info-ZIP, що використовується в більшості дистрибутивів, з версії 3.0 при створенні архівів зберігає імена файлів одночасно в двох кодуваннях: в тій, яка є, і в UTF-8. Такий архів можна буде розпакувати без проблем, а сумісність зі старими версіями архиваторов при цьому не порушується. Але це ніяк не допомагає при розпакуванні архівів, створених іншими програмами. Насправді, навіть специфікація формату ZIP включає пункт про те, що імена файлів повинні кодуватися або в CP437, або в UTF-8, але розробники архіваторів часто ігнорують цей пункт.

Схожі статті