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