在传输文件时,为什么要区分文本文件和二进制文件?为什么有些通道只设计用于传输文本数据?在最基层,它们都是位。
在传输文件时,为什么要区分文本文件和二进制文件?为什么有些通道只设计用于传输文本数据?在最基层,它们都是位。
在底层,它们都是位(bit)...没错。但是,有些传输通道每个字节有七位,而其他传输通道每个字节有八位。如果您通过七位通道传输ASCII文本,则一切正常。二进制数据会被损坏。
此外,不同的系统使用不同的换行约定:LF和CRLF很常见,但某些系统使用CR或NEL。文本传输模式将自动转换换行符,这会损坏二进制文件。
然而,这些东西现在大多数只是历史性的兴趣。大多数传输通道都是8位(比如HTTP),并且大多数用户对获得的任何换行符都没有问题。
一些7位通道的例子:SMTP(名义上,没有扩展),SMS、Telnet、一些串行连接。互联网并不总是建立在TCP/IP之上,这一点可以看出。
此外,HTTP规范说明:
在规范形式下,“text”类型的媒体子类型使用CRLF作为文本换行符。HTTP放宽了这个要求,并允许以纯CR或LF代替换行符表示一行换行符,但必须在整个实体主体中始终如一。
\n
来结束行,而在MS操作系统中,您需要使用\r\n
,而在Mac上,则需要使用\n\r
。像FTP客户端这样的软件会尝试添加/删除字符来更改文本文件的行结尾以匹配目标操作系统。这是为了确保文本文件在目标操作系统上看起来正确。所有的机器语言文件实际上都是二进制文件。
要打开一个二进制文件,必须在fopen命令中指定文件模式为"rb"或"wb"。否则,所有文件都将以默认模式打开,即文本模式。
需要注意的是,文本文件也可以存储和处理为二进制文件,但反之则不行。
二进制文件与文本文件有两个不同之处:
例如:
二进制文件不会在结尾处存储任何特殊字符,文件结束通过使用它们的大小来验证。