Архивы
Формат ZIP: спецификация и направления
Направления в обе стороны: из ZIP и в ZIP, с параметрами каждого преобразования.
Спецификация ZIP
| Полное имя | ZIP Archive |
|---|---|
| Разработчик спецификации | Фил Кац, PKWARE |
| Год публикации | 1989 |
| Расширение | .zip |
| MIME-типы | application/zip, application/x-zip-compressed |
| Тип содержимого | Двоичное |
| Модель сжатия | Без потерь |
| Алгоритмы | Deflate, реже BZip2 и LZMA |
| Сжатие | Независимое для каждого файла |
| Доступ | Произвольный — можно извлечь один файл |
| Шифрование | AES-256 надёжно, устаревший ZipCrypto — нет |
| Совместимость | Открывается без сторонних программ |
| Читающие программы | Проводник Windows, Архиватор macOS, 7-Zip, WinRAR, Ark |
| Документ спецификации | Открыть спецификацию |
ZIP → другие форматы
| Направление | Что получится | Точность |
|---|---|---|
| .zip.7z | Конвертация ZIP в 7Z | точная |
| .zip.tar | Конвертация ZIP в TAR | точная |
| .zip.tar.gz | Конвертация ZIP в TAR.GZ | точная |
Другие форматы → ZIP
| Направление | Что получится | Точность |
|---|---|---|
| .rar.zip | Конвертация RAR в ZIP | точная |
| .7z.zip | Конвертация 7Z в ZIP | точная |
| .tar.zip | Конвертация TAR в ZIP | точная |
| .tar.gz.zip | Конвертация TAR.GZ в ZIP | точная |
| .gz.zip | Конвертация GZ в ZIP | точная |
Спецификация ZIP
ZIP хранит каждый файл отдельным потоком с собственным локальным заголовком, а в конце архива размещает центральный каталог со смещениями всех записей. Из-за этого содержимое читается без распаковки целиком, но повреждение хвоста делает архив нечитаемым. Метод сжатия — обычно deflate, тот же, что в PNG и gzip.
Независимое сжатие каждой записи — причина, по которой ZIP проигрывает форматам с солидным блоком: тысяча похожих текстовых файлов упакуется хуже, чем в 7Z или TAR.GZ, где общий словарь охватывает весь поток. Зато любой файл извлекается без чтения остальных. Уже сжатые данные — JPEG, PNG, MP3, MP4, PDF, документы Office — внутри архива не уменьшаются: их энтропия близка к пределу, и deflate добавляет лишь служебные байты.
Имена файлов исторически записывались в кодировке OEM, и только бит 11 общего флага объявляет их как UTF-8. Архиваторы, не выставляющие этот бит, порождают знаменитый набор нечитаемых символов вместо кириллицы при распаковке на другой системе. Классический формат ограничивал размер архива и записи четырьмя гигабайтами и числом записей 65 535; расширение Zip64 сняло эти пределы, но очень старые распаковщики его не понимают.
Шифрование существует в двух версиях. Наследственный ZipCrypto вскрывается при наличии небольшого фрагмента исходного текста и защитой считаться не может. AES-128 и AES-256 надёжны, но поддерживаются не всеми распаковщиками. Права доступа Unix, символические ссылки и расширенные атрибуты ZIP не хранит вовсе — для переноса на сервер применяется TAR, в том числе в связке с gzip.
Форматы того же класса
Остальные записи класса «Архивы». Для каждой заведена своя страница с полным перечнем направлений: и от ZIP, и к нему.
Вопросы по формату ZIP
Можно ли переупаковать архив с паролем?
Нет. Переупаковка требует распаковки, а она невозможна без ключа, которого у сервиса нет и быть не должно. Снимите защиту локально и загрузите архив заново либо передайте файл в исходном виде. Попытка обработать зашифрованный архив завершается ошибкой чтения на первой же записи.
Насколько плотнее упакует 7Z?
Зависит от содержимого. На тексте, коде, логах, CSV, дампах баз и несжатых форматах вроде BMP и WAV алгоритм LZMA2 с общим словарём выигрывает у deflate 30–60 %. На уже сжатых данных выигрыш стремится к нулю. Плата — время распаковки и необходимость стороннего архиватора: штатные средства Windows и macOS 7Z не открывают.
Сохраняется ли структура каталогов?
Да, пути записываются относительно корня архива вместе с записями и восстанавливаются при распаковке. Пустые каталоги сохраняются отдельными записями с нулевой длиной. Не сохраняются права доступа, владелец и символические ссылки: этих полей в спецификации ZIP нет, и при переносе на Linux-сервер исполняемый бит придётся выставлять заново.