我们通常会简单理解为有“二进制”文件(目标文件、图像、电影、可执行文件、专有文档格式等)和“文本”文件(源代码、XML 文件、HTML 文件、电子邮件等)。
一般来说,要对文件进行有用的操作,您需要知道文件的内容,在这个意义上,如果编码是“二进制”或“文本”,实际上并不重要。当然,文件只存储字节数据,因此它们都是“二进制”的,“文本”没有了解编码就没有任何意义。尽管如此,仍然有必要谈论“二进制”和“文本”文件,但为了避免使用不准确的定义冒犯任何人,我将继续使用“引号”。
然而,有各种工具可以处理广泛的文件,并且在实际应用中,您希望根据文件是“文本”还是“二进制”做出不同的处理。其中一个例子是输出数据到控制台的任何工具。纯文本看起来很好,而且很有用。而“二进制”数据会使您的终端出现乱码,并且通常不方便查看。GNU grep至少在确定是否应将匹配项输出到控制台时使用此区别。
那么问题来了,如何判断一个文件是“文本”还是“二进制”?并且为了进一步限制,如何在类似Linux的文件系统上判断?我不知道有没有文件系统元数据指示文件的“类型”,因此问题进一步变成,通过检查文件的内容,如何判断它是“文本”还是“二进制”?为简单起见,让我们将“文本”限定为可在用户控制台上打印的字符。特别地,您需要如何实现这个功能?(我认为这在这个站点上是明确的,但我想总的来说,指向已存在的执行此操作的代码会很有帮助,我应该已经说明了),我真正想要的不是我可以使用哪些现有程序来执行此操作。