非公式に言うと、私たちのほとんどは、「バイナリ」ファイル (オブジェクト ファイル、画像、動画、実行可能ファイル、独自のドキュメント形式など) と「テキスト」ファイル (ソース コード、XML ファイル、HTML ファイル、電子メールなど) があることを理解しています。
一般に、ファイルを使って何か役に立つことができるようにするには、ファイルの内容を知る必要があり、エンコーディングが「バイナリ」または「テキスト」であるかどうかは問題ではありません。そしてもちろん、ファイルはバイト単位のデータを保存するだけなので、それらはすべて「バイナリ」であり、「テキスト」はエンコーディングを知らなければ意味がありません。それでも、「バイナリ」ファイルと「テキスト」ファイルについて話すことは依然として有用ですが、この不正確な定義で誰かを怒らせないように、引き続き「怖がらせる」引用符を使用します。
ただし、幅広いファイルに対応するさまざまなツールがあり、実際には、ファイルが「テキスト」であるか「バイナリ」であるかに基づいて、別のことを行いたいと考えています。この例は、コンソールにデータを出力するツールです。プレーンな「テキスト」は見栄えがよく、便利です。「バイナリ」データは端末を台無しにし、一般的に見ても役に立ちません。GNU grep は、一致をコンソールに出力するかどうかを決定する際に、少なくともこの区別を使用します。
問題は、ファイルが「テキスト」か「バイナリ」かをどのように見分けるかということです。さらに制限を加えると、Linux のようなファイル システムではどのように判断しますか? ファイルの「タイプ」を示すファイルシステムのメタデータを認識していないため、ファイルの内容を調べて、それが「テキスト」か「バイナリ」かをどのように判断すればよいのでしょうか? 簡単にするために、「テキスト」を、ユーザーのコンソールで印刷可能な文字を意味するように制限しましょう。特に、これをどのように実装しますか? (これはこのサイトで暗示されていると思いましたが、一般的に、これを行う既存のコードを指摘することは役立つと思います。指定する必要がありました)、既存のプログラムを使用して何ができるかについてはあまり知りませんこれ。