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