换行符(unix 和 windows)

By | 2014年01月3日

004在计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 33)的玩意,每秒钟可以打10个字符。但是它有一个问题,就是打完一行换行的时候,要用去0.2秒,正好可以打两个字符。要是在这0.2秒里面,又有新的字符传过来,那么这个字符将丢失。

于是,研制人员想了个办法解决这个问题,就是在每行后面加两个表示结束的字符。一个叫做“回车”,告诉打字机把打印头定位在左边界;另一个叫做“换行”,告诉打字机把纸向下移一行。

这就是“换行”和“回车”的来历,从它们的英语名字上也可以看出一二。

后来,计算机发明了,这两个概念也就被般到了计算机上。那时,存储器很贵,一些科学家认为在每行结尾加两个字符太浪费了,加一个就可以。于是,就出现了分歧。

Unix系统里,每行结尾只有“<换行>”,即“\n”;Windows系统里面,每行结尾是“<回车><换行>”,即“\r\n”;Mac系统里,每行结尾是“<回车>”。一个直接后果是,Unix/Mac系统下的文件在Windows里打开的话,所有文字会变成一行;而Windows里的文件在Unix/Mac下打开的话,在每行的结尾可能会多出一个^M符号。

换行,是在计算机领域中,换行(newline)或称为Line break或end-of-line(EOL)字符是一种加在文字最后位置的特殊字符,在换行字符的下一个字符将会出现在下一行,实际上换行字符根据不同的硬件平台或操作系统平台会有不同的编码方式。
换行字符可以看作是行的结束符,也可以看作行之间的分隔符,这两种处理方式之间存在一些歧义。如果换行字符被当作分隔符,那么文件的最后一行就不需要再有换行字符。但是多数系统的做法是在最后一行的后面也加上一个换行字符,也就是把换行字符看作是行的结束符。这样的程序在处理末行没有换行字符的文件时,可能会存在问题。相反地,有的程序把换行符看作分隔符,就会把最末尾的换行字符看作是新行的开始,也就是多出了一个空行。

换行符,也就是CR(Carriage Return)和LF(Line Feed)的问题
通常我们在EditPlus——工具——参数设置——文本——新建文件—>>中可以看到PC/UNIX/MAC三种格式
而在UltraEdit——高级——配置——文件处理——新建文件类型——>>中可以看到DOS/UNIX/MAC三种格式
而且UltraEdit在保存文件时也可以指定文件格式:DOS为CRLF,UNIX为LF,MAC为CR
实际上CR(回车符)和LF(换行符)都是用来表示下一行的,只不过各个系统采用的方式不同而已
DOS/Windows系统采用CRLF(即回车+换行)表示下一行
Linux/UNIX系统采用LF表示下一行
MAC系统采用CR表示下一行
注:CR的ASCII是十进制数的13,十六进制的0x0D,LF为10和0x0A

多数的计算机语言中,CR表示为字符或者字符串就是”\r”,LF为”\n”
而各语言的printf()函数中的”\n”则代表的是一个逻辑上的意义,即当前操作系统中的下一行
所以在UNIX上它代表的是LF,在Windows上则是CRLF

应用软件以及操作系统对于换行字符的表示方式:
以ASCII为基础的或相容的字符集使用分别LF(Line feed, 0Ah)或CR(Carriage Return, 0Dh)或CR+LF;下面列出各系统换行字符编码的列表
LF:在Unix或Unix相容系统(GNU/Linux, AIX, Xenix, Mac OS X, …)、BeOS、Amiga、RISC OS
CR+LF:MS-DOS、微软视窗操作系统(Microsoft Windows)、大部分非Unix的系统
CR:Apple II家族,Mac OS至版本9

2 thoughts on “换行符(unix 和 windows)

  1. Revin

    Windows 换行是CRLF (\\r\\n) 博主写错了
    而且如果是\\n\\r的话^M(就是\\r)应该出现在第二行才对

    Reply

发表评论

邮箱地址不会被公开。 必填项已用*标注