\r \n :换行符 回车符??有区别??认真的吗?

从前的从前,我一直以为回车即换行,换行即回车.
这个"以为"维持了二十余年

今天在了解这些转义符时,发现我的知识库又少了别人一截:

"回车"(carriage return)和"换行"(line feed)是两个不同的概念:

  • 在很久很久以前,在计算机宝宝还没有出生之前,有一种叫做电传打字机(Teletype Model 33)的神器,每秒钟可以打 10 个字符。(嗯,好像很厉害的样子)
  • BUT,神器也是有 bug 的(转折这么快??!)。就是在打完一行换行的时候,会需要0.2秒的反应时间,而恰是这 0.2 秒,可以打两个字符,对,就是两个字符。要是在这 0.2 秒里面,又有新的字符传过来,那么这个字符将丢失。(扔进咸水海的那种丢失)
  • 所以,机智的研制人员想了个办法,就是在每行后面加两个表示结束的字符。一个叫做"回车",告诉打字机把打印头定位在左边界,即回到行首;另一个叫做"换行",告诉打字机把纸向下移一行。
  • 所以这两个概念诞生了,它们是 different 的,睁大眼睛看看。
  • 后来de后来,计算机发明了,这两个概念也就被般到了计算机上。那时,存储器很贵,部分科学家认为在每行结尾加两个字符太浪费了,加一个就可以。
  • 于是,在多年后的今天,在不同操作系统中,有不同的操作符

大佬们就不能和平统一一下吗??

所以,现在,在不同的操作系统中,文件的实际换行符如下:(你经常也看不见它们)

  • linux,unix: \r\n
  • windows: \n
  • Mac OS: \r

单个拆开来讲,就是:

  • \n :
    在 Windows 中,表示换行且回到下一行的最开始位置
    在 Mac OS 中, 啊不,在 Mac OS 里,用 \r 符 飞速到达下一行的行首
    在 Linux、unix 中只表示换行,但不会回到下一行的开始位置(记住,人家用两个,豪气着呢)

  • \r :
    在 Linux、unix 中表示返回到当行的最开始位置,不会换行(记住,人家用两个,架势大)
    在 Windows 中, 啊不,Windows 中,人家用 \n 符,飞速到达下一行行首
    在 Mac OS 中,表示换行且返回到下一行的最开始位置

一个直接后果是,Unix/Mac系统下的文件在Windows里打开的话,所有文字会变成一行;
而Windows里的文件在Unix/Mac下打开的话,在每行的结尾可能会多出一个^M符号。

SO Easy, 话咁易。get 到一点了

posted @ 2019-04-16 22:01  喜欢吃面的猪猪  阅读(276)  评论(0编辑  收藏  举报