Файлы, бинарные данные и сжатие

Определение типа файлапо байтам, а не по имени

Выберите или перетащите один или несколько файлов: каждый определяется по первым байтам сразу после добавления.

Определение типа файла

Файлы

Перетащите файлы сюда или нажмите «Выбрать файлы». До 20 файлов за раз, размер любой.

Читается только начало каждого файла (и конец ZIP) — локально в браузере. Ничего не загружается.

Результат

Выберите или перетащите файлы, чтобы определить их тип.

Меняет только отображение, повторного чтения нет. Сигнатуры дальше от начала (tar, ISO, заголовок PE) показываются отдельно.

Выберите или перетащите файлы, чтобы определить их тип.

Отчёт — обычный текст: по блоку на файл с размером, выводом, MIME, сверкой расширения и байтами заголовка.

Определение типа файла нужно, когда имени больше нельзя верить: вложение без расширения, скачанный файл, который не открывается, форма загрузки, которая должна отклонить скрипт, переименованный в photo.jpg. Расширение — всего лишь подпись, которую кто-то поставил, а первые байты файла — магическое число, или сигнатура — записывает программа, создавшая файл.

Здесь определение типа файла выполняется локально: байты читаются в браузере, называются формат и возможные MIME-типы, а результат сверяется с расширением. Страница также показывает, на чём основан вывод — точная сигнатура, проверенная структура вроде имён файлов внутри ZIP или догадка по тексту, — и подсвечивает совпавшие байты, чтобы ответ можно было проверить самому.

Почему определение типа файла здесь

Вывод можно проверить побайтно, а расширение сверяется рядом.

Видны байты, на которых основан вывод

Заголовок показан в HEX и ASCII, найденная сигнатура подсвечена: 89 50 4E 47 у PNG, 50 4B 03 04 у ZIP. Сигнатуры глубже в файле, например ustar у tar на смещении 257, показываются вместе с позицией.

Две строки байтов заголовка в HEX; первые восемь байтов подсвечены и выделены скобкой, пунктирная линия ведёт к значку формата изображения с зелёной галочкой.

Расширение проверяется, а не принимается на веру

PNG, переименованный в .jpg, помечается как несовпадение с указанием формата, который ожидается для .jpg. А .docx, который на самом деле ZIP-контейнер, помечается как совместимый, а не ошибочный.

Файл, чьи первые байты 50 4B 03 04 ведут к значку архива, тогда как ярлык с именем показывает значок изображения; красный крест отмечает расхождение.

Три вещи, от которых зависит вывод

01

Добавьте файлы — кнопку жать не нужно

Выбор или перетаскивание сразу запускает определение, а новые файлы добавляются в список, не заменяя его. Читаются только первые 64 КиБ и, если файл похож на ZIP, последние 64 КиБ — поэтому образ диска на 20 ГБ обрабатывается так же быстро, как значок на 20 КБ.

  • «Загрузить примеры» добавляет четыре файла: обычный PNG, PNG с именем .jpg, минимальный .docx и нераспознаваемый .bin.
02

Посмотрите, на чём основан вывод

Точное совпадение сигнатуры: фиксированные байты на фиксированной позиции совпали. Сигнатура и проверенная структура: прочитано и внутреннее поле — имена файлов в ZIP, бренд в ftyp у MP4, подтип RIFF. Догадка по тексту: у формата нет фиксированного магического числа, как у JSON, XML или текста в UTF-8.

  • Старые файлы Office (doc, xls, ppt, msi) делят одну сигнатуру, поэтому показывается список возможных MIME-типов, а не одна догадка.
03

Сверьте с расширением и экспортируйте

«Совместимо» — не ошибка: .docx, .jar и .apk — это ZIP, а .m4a — контейнер MP4. Внимания заслуживает несовпадение. Строка «MIME от браузера» показывает File.type — он берётся из расширения, и именно поэтому для проверки не годится.

  • Число показанных байтов заголовка меняет только отображение; в отчёт попадает та же длина.

Что распознаётся и как принимается решение

Больше 70 форматов и подтипов

Изображения, PDF и офисные документы, архивы и форматы сжатия, исполняемые файлы (ELF, PE, Mach-O, WebAssembly), аудио- и видеоконтейнеры, шрифты, базы данных и дампы трафика, а также текстовые форматы с явным маркером в начале: XML, SVG, HTML, PEM.

Различает ZIP-контейнеры

По одним лишь именам в центральном каталоге ZIP отличает DOCX, XLSX, PPTX, ODT, EPUB, JAR, APK и IPA от обычного ZIP, не распаковывая ни одной записи.

Пять вариантов сверки расширения

Совпадает, не совпадает, совместимо, без расширения, сравнить нельзя: корректный .docx не объявляется неправильным .zip, а для файла без расширения предлагается подходящее.

Точный размер, любой размер

Для каждого файла указано точное число байтов рядом с КиБ, МиБ или ГиБ. Ограничения по размеру нет: затраты на определение формата не растут вместе с файлом.

Где заканчиваются возможности сигнатур

Это не антивирус
Правильная сигнатура PNG не делает файл безопасным, а вывод «PE» — вредоносным. Файл-полиглот может быть корректной картинкой, за которой идут другие данные. Для оценки безопасности нужен антивирус.
Одна сигнатура — несколько форматов
Старые документы Office и установщики MSI используют одну сигнатуру OLE2, а ZIP без характерных имён файлов так и остаётся ZIP. В таких случаях перечисляются все возможные MIME-типы, а не выбирается один.
Текст без маркера — просто текст
У CSV, YAML, INI, Markdown и исходного кода нет сигнатуры, они показываются как обычный текст (UTF-8, либо UTF-16 при наличии метки порядка байтов). Другие кодировки, например Windows-1251, не угадываются.
Определяет, но не разбирает
Архивы не распаковываются, EXIF не разбирается, исполняемые файлы не раскладываются по архитектуре и секциям; полный HEX-дамп — задача HEX-просмотрщика. Не больше 20 файлов за раз, папки рекурсивно не обходятся.

Определение типа файла: частые вопросы

Как определить тип файла по содержимому онлайн?

Перетащите файл в инструмент выше. Определение типа файла здесь опирается только на первые байты, а не на имя, и выполняется в браузере — файл никуда не отправляется.

Как узнать тип файла без расширения?

Так же: имя в определении не участвует, поэтому отсутствие расширения на результат не влияет. Сверка покажет «расширения для сравнения нет», а если формат распознан — предложит подходящее расширение.

Как узнать MIME-тип файла онлайн?

В результате указан MIME-тип, определённый по содержимому, и рядом — значение File.type от браузера. Второе браузер выводит из расширения, поэтому при переименованном файле они расходятся.

Что такое сигнатура файла?

Это фиксированная последовательность байтов на определённой позиции, по которой узнаётся формат; её ещё называют магическим числом или заголовком файла. Например, PNG начинается с 89 50 4E 47 0D 0A 1A 0A, и переименование это не меняет.

Какая сигнатура у ZIP-файла?

50 4B 03 04, то есть «PK». С неё же начинаются DOCX, XLSX, PPTX, JAR, APK и EPUB, потому что это тоже ZIP; инструмент читает имена файлов внутри архива и различает их.

Как определить тип файла в Linux?

Командой file имя_файла, которая использует базу сигнатур libmagic, или file --mime-type, чтобы получить только MIME-тип. Здесь та же идея, но с небольшой документированной таблицей, сверкой расширения и подсветкой байтов.

Остался вопрос?

Определение типа файла для ваших файлов

Сначала загрузите примеры и посмотрите рядом совпадение, расхождение, подтип ZIP и нераспознанный файл, а затем проверьте свои сомнительные файлы — определение типа файла займёт мгновение.

Всё выполняется локально в вашем браузере.