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