【发布时间】:2018-08-11 07:20:01
【问题描述】:
区分文本文件和二进制文件是很常见的。但是有正式的定义吗?我基本上看到了两种不同类型的定义。
第一个声明不可能仅通过查看文件的内容来知道文件是否为文本文件。您必须考虑文件的预期用途。
另一种定义更像是如果文件中的所有字节都属于某一组值,那么它就是一个文本文件。此定义可能需要对更高级的字符编码进行一些调整。
请赐教。文本文件的定义是什么?它和二进制文件有什么区别?
【问题讨论】:
-
没有万能的定义。它为什么如此重要?预期目的一有时是合适的,而字节范围一有时是合适的。
-
除了答案中列出的方面之外,另一个影响文件是否有用的文本文件的质量是行长。一个包含 500,000 个普通打印字符后跟一个换行符的文件可以说是一个文本文件,但大多数文本文件实用程序可能无法正确处理。
-
我会说您列出的两个“定义”都是正确的。另一件事是,是的,第二个定义“可能需要一些调整”。该定义取决于您对“打印字符”的概念是什么(ASCII?ISO8859-1?UTF-8?),以及您认为可以接受的控制字符。 Jonathan Leffler 引用的 C 标准文本仅提到水平制表符和换行符,但大多数人可能不会介意偶尔的退格或换页或其他一些。 (我们可能会陷入关于
\r是否允许在文本文件中的疯狂存在论。) -
text-files 和 binaryfiles 的 SO 标签文本是一个好的开始。另见维基百科Text file 和[二进制文件](en.wikipedia.org/wiki/Binary_file)。但是不,我不相信你会找到一个单一的官方定义。
-
除了 Unix 与 Windows(与旧 Mac)在行尾的约定之外,保守定义文本文件的另一个驱动因素是从前有支持 record oriented files 的操作系统是文件系统的显式部分。文本文件的每一行都必须适合记录,可能还有其他各种限制。 Unix 是彻底改变文件系统的操作系统之一,它宣称所有文件都是简单的、顺序的字节流,没有其他操作系统强加的结构。
标签: c file character-encoding text-files binaryfiles