"\r"、"\n"、"\r\n"从打字机的故事说起

打字机的故事

在很久很久以前,那时候计算机还没有出现呢,只有一种叫做电传打字机(Teletype Model 33,见下图)的玩意。



这玩意每秒钟可以打10个字符。但有一个问题,就是打完一行换行的时候,要用去0.2秒,正好可以打两个字符。如果在这0.2秒里面,又有新的字符传过来,那么这个字符将丢失。

怎么办呢?

人们想了个好办法,就是在每行后面加两个表示结束的字符:

·一个叫做"回车",告诉打字机把打印头定位在左边界;
·另一个叫做"换行",告诉打字机把纸向下移一行;

这就是"换行"和"回车"的来历。后来,有了计算机了,这两个概念也就被般到了计算机上。

刚开始的时候,存储器是很贵的,一些科学家认为在每行结尾加两个字符太浪费了,加一个就可以。于是,祸根就此埋下...

"\r" 与 "\n" 与 "\r\n"



请看上图(一图胜万语啊)

·A表示已经到行末了;
·B表示<回车>(Carriage Return,简写CR),"\r",将光标移动到当前行的开头,不会换到下一行;
·C表示<换行>(Line Feed,简写LF),"\n",将光标移动到当前位置的下一行,而不会回到行首;
·D就是<回车>+<换行>,"\r\n";

但是那时候,存储器是很贵的,很贵的,很贵的。程序员又穷,一个字符也不能浪费啊(蚊子肉再小也是肉呢!),怎么办?操作系统的战争就此开启。

Windows 与 Unix 与 Mac

在不同的操作系统下回车换行操作是不同的。刚理清了怎么又开始混乱啦!!



·Windows系统里,每行结尾是<回车><换行>,即\r\n;
·Unix系统里,每行结尾只有<换行>,即\n;
·Mac系统里,每行结尾是<回车>,即\r;

大家都不一样,又带来了新的问题:

Unix、Mac系统下的文件在Windows里打开的话,所有文字会变成一行;

而Windows里的文件在Unix/Mac下打开的话,在每行的结尾可能会多出一个^M符号。

所有噢,不同操作系统的文本解析代码就不同,程序员就要增加很多工作!!

程序员何苦为难程序员啊,大家都一样不好吗!我想下班,我想下班!!!

评论: 0 | 引用: 0 | 查看次数: 1323
发表评论
登录后再发表评论!