unix – 如何区分’二进制’和’文本’文件?

非正式地,我们大多数人理解,有’二进制’文件(目标文件,图像,电影,可执行文件,专有文档格式等)和’文本’文件(源代码,XML文件,HTML文件,电子邮件等)。

一般来说,你需要知道一个文件内容,以便能够做任何有用的事情,并形成这个观点,如果编码是’二进制’或’文本’,这并不重要。当然,文件只是存储字节数据,所以它们都是“二进制”和“文本”并不意味着什么,而不知道编码。但是,仍然有用的谈论’二进制’和’文本’文件,但为了避免违反任何人的这个不精确的定义,我会继续使用’scare’引号。

但是,有各种工具可以处理各种各样的文件,在实际情况下,您想根据文件是“文本”还是“二进制”来做不同的操作。一个例子是在控制台上输出数据的任何工具。纯文本’看起来很好,是有用的。 ‘二进制’数据混乱了你的终端,一般没有用看看。 GNU grep至少在确定是否应该输出与控制台匹配时使用此区别。

所以,问题是,你怎么知道一个文件是“文本”还是“二进制”?而进一步限制,你如何告诉一个像Linux的文件系统?我不知道任何文件系统元数据指示一个文件的’类型’,所以问题进一步变成,通过检查文件内容,我如何判断它是’文本’还是’二进制’?为了简单起见,我们将“文本”限制为可在用户控制台上打印的字符。特别是你将如何实现这一点? (我认为这是隐含在这个网站,但我想这是有帮助的,一般来说,指向现有的代码,这样做,我应该指定),我不是真的可以使用现有的程序,这个。

我们的软件读取一些二进制文件格式以及文本文件

我们首先看一下我们认识的magic number的前几个字节。如果我们不识别任何我们读取的二进制类型的幻数,那么我们查看文件的第一个2K字节,看看它是否似乎是一个UTF-8UTF-16或在当前code page编码的文本文件的主机操作系统。如果它不通过这些测试,我们假定它不是一个我们可以处理的文件,并抛出一个适当的异常。

相关文章

用的openwrt路由器,家里宽带申请了动态公网ip,为了方便把2...
#!/bin/bashcommand1&command2&wait从Shell脚本并行...
1.先查出MAMP下面集成的PHP版本cd/Applications/MAMP/bin/ph...
1、先输入locale-a,查看一下现在已安装的语言2、若不存在如...
BashPerlTclsyntaxdiff1.进制数表示Languagebinaryoctalhexa...
正常安装了k8s后,使用kubect工具后接的命令不能直接tab补全...