Неофициально, большинство из нас понимают, что существуют «двоичные» файлы (объектные файлы, изображения, фильмы, исполняемые файлы, собственные форматы документов и т. Д.) И «текстовые» файлы (исходный код, файлы XML, HTML-файлы, электронная почта и т. Д.). ).
В общем, вам нужно знать содержимое файла, чтобы иметь возможность делать с ним что-нибудь полезное, и формировать эту точку зрения, если кодировка является «двоичной» или «текстовой», это на самом деле не имеет значения. И, конечно, файлы просто хранят байты данных, поэтому все они являются «двоичными», и «текст» ничего не значит, не зная кодировку. И все же, все еще полезно говорить о «двоичных» и «текстовых» файлах, но чтобы не оскорбить кого-либо этим неточным определением, я продолжу использовать «напуганные» кавычки.
Однако существуют различные инструменты, которые работают с широким диапазоном файлов, и с практической точки зрения вы хотите сделать что-то другое в зависимости от того, является ли файл «текстовым» или «двоичным». Примером этого является любой инструмент, который выводит данные на консоль. Обычный «текст» будет хорошо смотреться и будет полезен. «двоичные» данные портят ваш терминал и, как правило, бесполезны для просмотра. GNU grep по крайней мере использует это различие при определении, должен ли он выводить совпадения на консоль.
Итак, вопрос в том, как определить, является ли файл «текстовым» или «двоичным»? И чтобы ограничить это дальше, как вы скажете на Linux, как файловая система? Мне неизвестны какие-либо метаданные файловой системы, которые указывают «тип» файла, поэтому вопрос, который я проверяю, проверяет содержимое файла: «текстовый» или «двоичный»? А для простоты давайте ограничим «текст» символами, которые можно распечатать на консоли пользователя. И, в частности, как бы вы реализовали это? (Я думал, что это подразумевается на этом сайте, но я думаю, что в целом полезно указать на существующий код, который делает это, я должен был указать), я не совсем понимаю, какие существующие программы я могу использовать для выполнения это.