Исправить текст в конвертере ↓
Содержимое файлов в ZIP-архиве хранится байт в байт, а вот имена файлов — в той кодировке, которую выбрала программа-архиватор. Старый формат ZIP знает только одну «правильную» кодировку имен — DOS-кодировку CP437, и архиваторы на русской Windows десятилетиями записывали имена в русской DOS-кодировке CP866, никак это не отмечая. Позже в формат добавили флажок «имена в UTF-8», но его ставят не все программы. Поэтому архив, созданный на одном компьютере, на другом может распаковаться с испорченными именами. Сами файлы при этом не повреждены.
Пример — файл Отчёт_2024.docx:
| Что видно | Где | Что произошло |
|---|---|---|
ÄΓτ±Γ_2024.docx | macOS, Linux, некоторые программы | Архив создан на Windows, имена в CP866, а распаковщик читает их по стандарту как CP437 |
Ћвзсв_2024.docx | Windows, сторонние программы | Имена в CP866 прочитаны как Windows-1251 |
╨Ю╤В╤З╤С╤В_2024.docx | Windows, «Проводник» | Архив создан на Mac или в Linux, имена в UTF-8 без флажка, а Windows читает их как CP866 |
Если файлов немного, их можно просто переименовать: скопируйте испорченное имя в конвертер ниже. Для вида «ÄΓτ±Γ» он уже настроен на перекодировку из CP437 в CP866, для остальных случаев нажмите «Определить кодировку текста».
unzip -O cp866 archive.zip. Ключ -O есть в unzip в Ubuntu, Debian и большинстве других дистрибутивов. Если его нет, подойдет unar -e cp866 archive.zip из пакета unar.unar -e cp866 archive.zip.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: в нем имена всегда хранятся в Юникоде.
cu=on в 7-Zip.