Конвертер кодировок текста

Кракозябры в именах файлов после распаковки ZIP-архива

Исправить текст в конвертере ↓

Содержимое файлов в ZIP-архиве хранится байт в байт, а вот имена файлов — в той кодировке, которую выбрала программа-архиватор. Старый формат ZIP знает только одну «правильную» кодировку имен — DOS-кодировку CP437, и архиваторы на русской Windows десятилетиями записывали имена в русской DOS-кодировке CP866, никак это не отмечая. Позже в формат добавили флажок «имена в UTF-8», но его ставят не все программы. Поэтому архив, созданный на одном компьютере, на другом может распаковаться с испорченными именами. Сами файлы при этом не повреждены.

Как узнать проблему по виду

Пример — файл Отчёт_2024.docx:

Что видноГдеЧто произошло
ÄΓτ±Γ_2024.docxmacOS, Linux, некоторые программыАрхив создан на Windows, имена в CP866, а распаковщик читает их по стандарту как CP437
Ћвзсв_2024.docxWindows, сторонние программыИмена в CP866 прочитаны как Windows-1251
╨Ю╤В╤З╤С╤В_2024.docxWindows, «Проводник»Архив создан на Mac или в Linux, имена в UTF-8 без флажка, а Windows читает их как CP866

Если файлов немного, их можно просто переименовать: скопируйте испорченное имя в конвертер ниже. Для вида «ÄΓτ±Γ» он уже настроен на перекодировку из CP437 в CP866, для остальных случаев нажмите «Определить кодировку текста».

Как распаковать архив с правильными именами

  • Linux. Укажите кодировку имен при распаковке: unzip -O cp866 archive.zip. Ключ -O есть в unzip в Ubuntu, Debian и большинстве других дистрибутивов. Если его нет, подойдет unar -e cp866 archive.zip из пакета unar.
  • macOS. Встроенная «Утилита архивации» кодировку выбрать не дает. Установите бесплатную программу The Unarchiver: она обычно определяет кодировку сама, а если ошиблась — позволяет выбрать ее вручную. В Терминале можно использовать ту же команду unar -e cp866 archive.zip.
  • Windows. Если имена испортились в «Проводнике» (архив пришел с Mac или из Linux), распакуйте архив программой 7-Zip — она распознает имена в UTF-8 надежнее.
  • Python. Начиная с версии 3.11 кодировку имен можно указать при открытии архива: zipfile.ZipFile('archive.zip', metadata_encoding='cp866').

Как создать архив, который откроется везде

Надежнее всего, чтобы имена в архиве были в UTF-8 и с флажком, сообщающим об этом. В 7-Zip при создании архива ZIP укажите в поле «Параметры» строку cu=on или в командной строке добавьте ключ -mcu=on: 7z a -mcu=on archive.zip папка. Такой архив правильно распакуется и на Windows, и на Mac, и в Linux. Другой вариант — использовать формат 7z: в нем имена всегда хранятся в Юникоде.

Частые вопросы

Файлы внутри архива тоже испорчены?
Нет. Кодировка влияет только на имена файлов и папок. Содержимое — документы, фотографии, таблицы — распаковывается без изменений, достаточно переименовать файлы.
Почему один и тот же архив на работе открывается нормально, а дома — с кракозябрами?
Разные программы по-разному угадывают кодировку имен, если в архиве нет флажка UTF-8. Чтобы не зависеть от программы получателя, создавайте архивы с параметром cu=on в 7-Zip.
В архиве RAR такая же проблема?
Как правило, нет: формат RAR давно хранит имена файлов в Юникоде. Проблема встречается в основном у ZIP-архивов, созданных старыми или встроенными архиваторами.