在文本模式下写入/读取文件时,新行字符被转换为回车和换行,即 \n 到 \r\n 但在二进制模式下不会发生这种情况。
同样,ASCII 值 26 将在文本模式下写入文件末尾,但在二进制模式下不会发生这种情况。
我知道这个问题早先在 SO 中被问过,但我没有找到任何关于这种行为的理由。
我的意思是,这种行为只是为了区分文本和二进制模式,还是这种翻译有任何具体原因,并且在二进制模式的情况下不写入 ASCII 值 26。
从某种意义上说,二进制模式是“原始的”:没有翻译任何内容,因为它没有这样做的基础。而在文本模式下,文件被解释为文本,因此(例如)行尾被翻译为适当的表示。
文本文件处理取决于操作系统。根本不处理二进制文件。Windows,用 CR+LF 替换行尾,在 Linux 和 OSX 中它是 LF。在 Linux 中,就操作系统而言,文本文件和二进制文件的处理没有区别。
模式修饰符 翻译模式 t 以文本(翻译)模式打开。b 以二进制(未翻译)模式打开;涉及回车和换行字符的翻译被禁止。