Как определить, находится ли файл в формате PDF?
Позвольте мне процитировать ISO 32000-1:
Первая строка файла PDF должна быть заголовкомсостоящий из 5 символов% PDF–, за которым следует номер версии в форме 1.N, где N - это цифра от 0 до 7.
И ИСО 32000-2:
Файл PDF начинается с 5 символов «% PDF–», а смещения должны рассчитываться по знаку ПРОЦЕНТ (25h).
В чем разница?Когда вы сталкиваетесь с файлом, который начинается с %PDF-1.0
до %PDF-1.7
, у вас есть файл ISO 32000-1;начиная с ISO 32000-2, файл PDF также может начинаться с %PDF-2.0
.
Как определить, является ли файл двоичным файлом?
Это также объясняется в ISO 32000:
Если PDF-файл содержит двоичные данные, как это делают большинство, за строкой заголовка должна немедленно следовать строка комментария, содержащая не менее четырех двоичных символов, то есть символов, коды которых составляют 128 или более.Это обеспечивает правильное поведение приложений передачи файлов, которые проверяют данные в начале файла, чтобы определить, следует ли рассматривать содержимое файла как текст или как двоичный файл.
Если вместо этого открыть PDF в текстовом редактореВ средстве просмотра PDF вы часто увидите, что вторая строка выглядит следующим образом:
%âãÏÓ
Не существует такого понятия, как «простой текстовый файл»;файл всегда имеет кодировку.Однако, когда люди говорят о простых текстовых файлах, они часто имеют в виду говорить файлы ASCII.Файлы ASCII - это файлы, у которых все байты имеют значение меньше 128 (10000000
).
В старые времена протоколы передачи часто рассматривали документы PDF, как если бы они были файлами ASCII.Вместо того, чтобы отправлять 8-битные байты, они отправляли только первые 7-битные байты (это иногда называют «байтовым преобразованием»).Когда это происходит, байты ASCII файла PDF сохраняются, но весь двоичный контент поврежден.Когда вы открываете такой PDF-файл в программе просмотра PDF, вы видите страницы файла PDF, но каждая страница пуста.
Чтобы избежать этой проблемы, в заголовок PDF-файла добавляются четыре не-ASCII символа.Протоколы передачи проверяют первую серию байтов, видят, что некоторые из этих байтов имеют значение выше 127 (01111111
), и поэтому обрабатывают файл как двоичный файл.
Как определить, является ли файлв формате HTML?
Это более сложно, так как HTML позволяет людям быть небрежными.Можно ожидать, что первое непустое пространство HTML-файла будет символом <
, но такой файл также может быть простым XML-файлом, не имеющим формат HTML.
Вы быожидайте <!doctype html>
, <html>
или <body>
где-нибудь в файле (с атрибутами или без атрибутов внутри тега), но некоторые люди создают файлы HTML без упоминания DocType и даже без тега <html>
или <body>
.
Обратите внимание, что файлы HTML могут входить в различные кодировки.Например: когда они кодируются с использованием UTF-8, они будут содержать байты со значением больше 127.
Как определить, является ли файл текстовым файлом ASCII?
Просто зациклитьсявсе байты.Если вы найдете байт со значением, превышающим 127, у вас есть файл не в формате ASCII.
А как насчет файлов в Unicode?
В этом случае будет байтМарка заказа (BOM), позволяющая определить кодировку файла.Подробнее об этом здесь .
Есть ли другие кодировки?
Конечно, есть!См., Например, ISO / IEC 8859 .Во многих случаях текстовый файл не знает, какая кодировка использовалась, поскольку кодировка не сохраняется как свойство файла.