Расширение врёт: как XanderFiles распознаёт файлы по первым байтам
У файла есть два имени. Первое пользователь видит после точки: это расширение, которое добавил человек, почтовый клиент или сайт. Второе скрыто внутри самого файла — в первых байтах. Именно эта часть обычно надёжнее подсказывает, с чем предстоит работать.
На таком принципе построен XanderFiles — просмотрщик для Android, способный открывать более двухсот типов файлов. В его списке есть привычные документы PDF и Excel, архивы RAR, электронные книги FB2, фотографии в RAW, подписанные файлы .p7m и вложения Outlook в формате winmail.dat.
Почему одного расширения недостаточно
Имя файла не гарантирует, что его содержимое соответствует суффиксу после точки. Вложение может быть переименовано пользователем, почтовой программой или сайтом, который изменил имя автоматически. Поэтому приложение, ориентирующееся только на расширение, рискует выбрать неподходящий обработчик ещё до попытки прочитать данные.
Проверка первых байтов позволяет смотреть на файл с другой стороны: не на то, как он назван, а на то, чем он является. Для универсального просмотрщика это особенно важно, поскольку один и тот же сценарий должен работать с документами, архивами, изображениями, книгами и менее распространёнными форматами.
От документов до медицинских снимков
Набор поддерживаемых форматов в XanderFiles заметно выходит за рамки обычного офисного просмотрщика. Помимо PDF и таблиц Excel, приложение работает с архивами, в том числе защищёнными паролем, книгами FB2, RAW-файлами с фотокамер, билетами Wallet, подписанными документами .p7m и изображениями КТ, записанными на дисках из клиник.
Отдельную группу составляют форматы, которые часто становятся источником ошибок при открытии вложений. Среди них winmail.dat из экосистемы Outlook и файлы, внутри которых могут находиться другие данные. Для пользователя это выглядит как обычная проблема «не удаётся открыть файл», но на стороне приложения приходится учитывать сам формат и способ, которым он оказался упакован.
WebAssembly и другие инженерные проблемы
Разработка такого просмотрщика сводится не только к добавлению расширений в список. Внутри проекта встречаются WebAssembly, многоуровневая структура вложений Outlook, исправление чужого минифицированного кода прямо во время работы и изображения, которые не создаются обычным рисованием.
Именно эти случаи показывают, почему универсальная поддержка форматов быстро превращается в отдельную инженерную задачу. Нужно распознать реальное содержимое, добраться до данных внутри контейнера или вложения и затем корректно показать результат на Android. Расширение при этом остаётся лишь подсказкой — иногда полезной, но далеко не всегда правдивой.


