为什么我们要在传输时区分文本文件和二进制文件?为什么有些频道只针对文字数据设计?在底层,它们都是位。
答案 0 :(得分:22)
在底层,它们都是位......真的。然而,一些传输信道每字节有7比特,而其他传输信道每字节有8比特。如果您通过七位通道传输ASCII文本,那么一切都很好。二进制数据被破坏了。
此外,不同的系统对行结尾使用不同的约定:LF和CRLF很常见,但有些系统使用CR或NEL。文本传输模式将自动转换行结尾,这将损坏二进制文件。
然而,如今这些都是历史上最重要的。大多数传输通道都是8位(例如HTTP),并且大多数用户都可以使用它们获得的任何行结束。
7位频道的一些示例: SMTP(名义上,没有扩展名),短信,Telnet,某些串行连接。互联网并不总是建立在TCP / IP上,而是显示出来。
此外,HTTP规范指出,
当采用规范形式时,“text”类型的媒体子类型使用CRLF作为文本换行符。 HTTP放宽了这一要求,允许传输具有普通CR或LF的文本媒体,代表整个实体的一致性。
答案 1 :(得分:8)
所有文件都以两种文件格式之一保存 - 二进制或文本。这两种文件类型在表面上看起来可能相同,但它们的内部结构不同。
虽然二进制文件和文本文件都包含存储为一系列(位(二进制值1s和Os))的数据,但文本文件中的位表示字符,而二进制文件中的位表示自定义数据。
答案 2 :(得分:5)
区分两者很重要,因为不同的操作系统对文本文件的处理方式不同。例如,在* nix中,在使用\n
的MS OS中使用\r\n
结束行,而在使用\n\r
的Mac中结束行。 FTP客户端等软件尝试通过添加/删除字符来更改文本文件的行结尾以匹配目标操作系统。这是为了确保文本文件在目标操作系统上正常显示。
例如,如果你在* nix中创建一个包含换行符的文本文件并尝试将其作为二进制文件复制到Windows框并在记事本中打开它,你将看不到任何行结尾,而只是一个堵塞文字。
答案 3 :(得分:1)
重要的是,添加到已经提供的答案是文本文件和二进制文件都表示字节,但文本文件与二进制文件不同,因为字节被理解为表示字符。使用特定代码页或Unicode在文件上一致地完成字节到字符的映射。使用7或8位代码页时,您可以在阅读这些文件时旋转拨号,并使用英语字母,德语字母,俄语字母或其他语言对其进行解释。旋转表盘不会影响字节,它确实会影响选择哪些字符来对应字节。
正如其他人所说,还存在换行符分隔符编码的问题,这对于文本文件是唯一的,并且可能因平台而异。 "换行"不是我们字母表中的字母或您可以写的符号,因此其他规则适用于它。
对于二进制文件,没有关于字符编码的隐式约定或对" line"的定义。
答案 4 :(得分:1)
文本文件
二进制文件
位代表自定义数据。
很容易损坏,即使只是一点点更改也可能损坏文件
可以在一个文件中存储不同类型的数据(图像,音频,文本)。
是专门为某个应用程序开发的,其他应用程序可能无法理解。
可以具有任何应用程序定义的扩展名。
答案 5 :(得分:-1)
所有机器语言文件实际上都是二进制文件。
要打开二进制文件,必须在fopen命令中将文件模式称为" rb"或" wb"否则,所有文件都以默认模式打开,即文本模式。
可以注意到,文本文件也可以作为二进制文件存储和处理,但不能反过来。
二进制文件与文本文件的区别在于两种方式:
例如:
二进制文件最后不存储任何特殊字符,文件结尾通过它们的大小来验证。