Форматы
Все форматы файлов: чем открыть и конвертировать
Документы, изображения, видео, архивы, код и образы дисков: чем открыть и во что конвертировать PDF, HEIC, MKV, RAR, JSON, ISO и другие.
Пришёл файл вообще без точки и расширения, или с расширением, которому нельзя доверять? Настоящий формат файла зашит не в имени, а в первых байтах самого файла — так называемой сигнатуре, или magic bytes. По ней можно точно узнать, что перед вами: PDF, картинка, архив или замаскированный исполняемый файл. Разбираем все способы — от онлайн-определителя за десять секунд до чтения заголовка в hex-редакторе и в коде.

Расширение — это просто буквы в имени файла, их легко удалить или подменить. Настоящий формат хранится в сигнатуре — первых байтах файла. Чтобы узнать формат без расширения: (1) для разовой задачи загрузите файл в онлайн-определитель или откройте его в hex-редакторе и сверьте первые байты с таблицей сигнатур ниже; (2) в Linux и macOS выполните команду file имя_файла; (3) для массы файлов используйте утилиту TrID или библиотеку python-magic. По сигнатуре PDF начинается с %PDF, PNG — с ‰PNG, ZIP и DOCX — с PK, а Windows-программа — с MZ.
Операционная система показывает тип файла по расширению — тексту после последней точки в имени (.pdf, .jpg, .docx). Но расширение — это метка для удобства, а не часть содержимого. Его можно стереть, переименовать отчёт.pdf в отчёт.txt или вовсе убрать — сам файл при этом не изменится ни на байт.
Настоящий формат определяется по сигнатуре — фиксированной последовательности байтов в самом начале файла (реже — в конце или по смещению). Её называют magic bytes или «магическое число». Именно на сигнатуру ориентируются программы, антивирусы и веб-серверы, когда решают, как обработать файл. Например, любой корректный PNG начинается с байтов 89 50 4E 47, что в тексте читается как ‰PNG, а ZIP-архив (и построенные на нём DOCX, XLSX, EPUB, APK) — с 50 4B, то есть PK (инициалы Фила Каца, создателя формата).
Хотите узнать реальный формат — смотрите не на имя файла, а на его первые байты. Имя лжёт легко, сигнатура — почти никогда.
Самый быстрый вариант для одного-двух файлов — сервис, который анализирует содержимое и возвращает вероятный тип. Вы загружаете файл, сервис читает его заголовок и сообщает: «это JPEG», «это SQLite-база», «это исполняемый файл Windows». Подходит, когда под рукой нет специальных программ.
Онлайн-сервис получает ваш файл на чужой сервер. Для паспортов, договоров, рабочих документов и любых конфиденциальных данных используйте офлайн-способы — hex-редактор или команду file. Подробнее о рисках — в разделе безопасность файлов.
Универсальный офлайн-метод: открыть файл в шестнадцатеричном (hex) редакторе и посмотреть на первые байты. Hex-редактор показывает содержимое файла как таблицу байтов в шестнадцатеричном виде и рядом — их текстовое представление (ASCII). Часто формат виден прямо по буквам: %PDF, Rar!, GIF8.
Для форматов на основе контейнеров сигнатуру иногда нужно искать не в самом начале. Например, у видео MP4 и MOV метка ftyp стоит начиная с 5-го байта (по смещению 4), а у ZIP пустой архив может начинаться с 50 4B 05 06. Но в подавляющем большинстве случаев хватает первых четырёх байтов.
Первые байты самых частых форматов. Слева — как они выглядят в hex-редакторе (шестнадцатеричные значения), в центре — их текстовое представление, справа — что это за файл.
| Сигнатура (hex) | Текст (ASCII) | Формат |
|---|---|---|
| 25 50 44 46 | PDF-документ (чем открыть PDF) | |
| FF D8 FF | ÿØÿ | Изображение JPEG / JPG |
| 89 50 4E 47 | ‰PNG | Изображение PNG |
| 47 49 46 38 | GIF8 | Анимация / картинка GIF |
| 52 49 46 46 | RIFF | Контейнер WebP, WAV, AVI |
| 50 4B 03 04 | PK·· | ZIP, а также DOCX, XLSX, EPUB, APK |
| 52 61 72 21 | Rar! | Архив RAR |
| 37 7A BC AF | 7z¼¯ | Архив 7z |
| 1F 8B | ·· | Архив GZIP (.gz, .tar.gz) |
| 49 44 33 | ID3 | Аудио MP3 (с тегами ID3) |
| 66 74 79 70 (со смещения 4) | ftyp | Видео MP4, M4A, MOV, HEIC |
| 4D 5A | MZ | Программа Windows (.exe, .dll) |
| 7F 45 4C 46 | ·ELF | Исполняемый файл Linux |
| D0 CF 11 E0 | ÐÏ·· | Старый MS Office (.doc, .xls, .ppt) |
| 53 51 4C 69 74 65 | SQLite | База данных SQLite |
Если файл начинается с PK — это ZIP-контейнер, но внутри может быть документ Word, таблица Excel, книга EPUB или Android-приложение APK. Чтобы понять точнее, распакуйте архив и посмотрите на структуру: у DOCX внутри лежит папка word/, у EPUB — файл mimetype.
В Linux и macOS формат определяется одной командой в терминале — встроенная утилита file читает сигнатуру и базу известных типов и сразу выдаёт вердикт:
file mystery
# mystery: PDF document, version 1.7
file -i mystery
# mystery: application/pdf; charset=binaryФлаг -i (в macOS -I) выводит MIME-тип — тот самый, по которому файлы различают браузеры и почтовые серверы. В Windows такой команды нет из коробки, но file входит в состав Git Bash, WSL и пакета Cygwin.
Когда файлов много или формат редкий, помогают специализированные определители:
В Linux и macOS первые байты можно посмотреть прямо в терминале: xxd mystery | head или head -c 16 mystery | xxd покажут начало файла в hex — дальше сверяйте с таблицей выше.
Если файлы приходят потоком — например, пользователи загружают вложения на сайт, — проверять формат вручную бессмысленно. Определение по сигнатуре встраивают прямо в код. В Python это делает библиотека python-magic (обёртка над той же libmagic, что и команда file):
import magic
mime = magic.from_buffer(open("mystery", "rb").read(2048), mime=True)
# 'application/pdf'Простейший случай — прочитать несколько первых байтов и сравнить их с известной сигнатурой вручную:
with open("mystery", "rb") as f:
head = f.read(4)
if head == b"%PDF":
print("Это PDF")
elif head[:3] == b"\xFF\xD8\xFF":
print("Это JPEG")Проверка формата по сигнатуре — обязательный элемент безопасной загрузки файлов: доверять расширению или заголовку Content-Type от клиента нельзя, реальный тип определяют только по содержимому. В корпоративных продуктах, где через формы и API проходят тысячи документов, такую валидацию и последующую обработку файлов обычно закладывают в архитектуру ещё на старте — этим занимается команда YuSMP Group при разработке веб-сервисов и интеграций. Если же вам нужно просто перевести определившийся файл в удобный формат, пригодится подборка онлайн-конвертеров файлов.
Когда формат определён, остаётся вернуть файлу правильное расширение, чтобы он открывался двойным кликом. Сначала включите отображение расширений — по умолчанию система их скрывает.
mystery.pdf.Переименование .txt в .jpg не превратит текст в картинку — оно лишь подсказывает системе, какой программой открывать. Если сигнатура не совпадает с расширением, файл всё равно не откроется. Чтобы действительно поменять формат, нужна конвертация.
Расхождение между расширением и настоящим форматом бывает не только по ошибке. Иногда это делают намеренно — и как раз здесь определение по сигнатуре важнее всего.
.exe или скрипт переименовывают в .pdf или .jpg, чтобы жертва не насторожилась. Сигнатура MZ вместо %PDF сразу выдаёт обман. Как проверять такие файлы — в материале как проверить файл на вирусы.otchet.pdf.exe при скрытых расширениях выглядит как otchet.pdf — классическая уловка из вложений в письмах..bin, .dat, .tmp.Вывод один: имя файла — подсказка, а не доказательство. Реальный формат всегда решают первые байты, и теперь у вас есть все инструменты, чтобы их прочитать.
Для одного файла — загрузить его в онлайн-определитель типа или открыть в hex-редакторе и сверить первые байты с таблицей сигнатур. В Linux и macOS ещё быстрее команда file имя_файла в терминале.
Это фиксированная последовательность байтов в начале файла, по которой определяется его формат. Например, PDF всегда начинается с %PDF, PNG — с ‰PNG. Сигнатура — часть содержимого файла и не зависит от имени и расширения.
Нет. Переименование меняет только метку в имени, а не содержимое. Если дописать неверное расширение, файл не откроется. Сначала определите настоящий формат по сигнатуре, а потом ставьте соответствующее расширение.
Это ZIP-контейнер. Но внутри может быть документ Word (DOCX), таблица Excel (XLSX), книга EPUB или Android-приложение APK — все они устроены как ZIP. Чтобы уточнить, распакуйте архив и посмотрите на его внутреннюю структуру.
Так бывает, когда файл выгружен из программы или мессенджера, скачан по прямой ссылке без имени, либо расширение случайно удалили при переименовании. На содержимое это не влияет — формат по-прежнему определяется по сигнатуре.
Может быть опасно: под безобидным расширением иногда прячут исполняемый файл. Сначала определите реальный формат по сигнатуре, и если это программа или скрипт, которого вы не ждали, — не запускайте его и проверьте антивирусом.
Используйте утилиту TrID или DROID — они рассчитаны на пакетную идентификацию, — либо напишите короткий скрипт с библиотекой python-magic, которая читает сигнатуру и возвращает MIME-тип каждого файла.