0
Posted on 下午11:40:00 by Fan Zhang and filed under

行结束符

一个文本文件是由行组成的,本文所说的就是行与行之间用来表示新行(newline)的间隔,一般称作断行符(link break)或者行结束符(end-of-line, EOF)。

由于历史的原因,不同的操作系统用来表示换行的字符不同,这就给跨操作系统编辑文件带来不便。

操作系统中的差异

使用下面的 Unicode 标准定义的符号:

  • LF: Line Feed, U+000A, '\n'
  • CR: Carriage Return, U+000D, '\r'

不同的操作系统使用的行结束符:

  • Windows 使用 CR+LF,也就是 '\r\n'
  • Linux/Unix 系列使用 LF,也就是 '\n'

特别的,目前 Mac OS X 是基于 Unix 的,所以行结束符也是 LF。只有 v9 之前 Mac OS 才是用 '\r'。

历史

为什么对“另起一行”的处理有这样的差异,是因为早期的电传打字机(teletype)从左至右打完一行的时候,需要给打印机头重新移回左边界的时间,在一个字符的时间内,不足以让打印机头移动到正确的位置,这样会影响下一个字符的打印。所以就需要在一行结束的时候额外传递一个 CR 字符令装置 carriage 归位。

进一步阅读:Wikipedia: Newline

对不同换行符的处理

一般操作系统的运行库决定了文本文件的换行格式,在一个平台上使用另一种换行符的文件通常会有问题。大部分编辑器会自动识别换行符类型,并带有换行转换的功能。

比如某些 FTP 软件在进行文本传输的时候会对换行符进行转换(这样修改了原文件)。

Python 使用 "Universal Newline" 处理这个问题。在以文本方式 open() 的时候,会对换行符进行识别并一致处理成 '\n',在文件写入的时候,也只要 write('\n') 即可,Python 会根据操作系统自动处理。有关文档:

本文 github 中的镜像

0
评论 : 不同操作系统中的行结束符

发表评论