CRLF是什么东西?

时间:2023-02-20 22:45:49

对于CRLF这个词来说,相信搞开发的应该都不会陌生,其意思是回车换行

但是对于这个普遍解释,我还有以下两点疑问


1.为什么CR代表回车,LF代表换行?

2.回车和换行到底是什么东西,'\r','\n'又是什么东西?


答1:

        关于为什么用CRLF代表回车换行,则要提一下一个历史问题,相信大家在电视上看美国一些老电影的时候都看过打字员使用打字机的场景,当打字到一行尾部的时候,机器会有两个操作,一个是打印的针头会调回到开始处;另一个是打印纸同时会向下移动一行。对于前者就叫做Carriage Return(Carriage Return可以翻译为机器滑动的部分回到开始处)简写即为CR;而后者就叫做Line Feed(Line Feed有行满的意思),简称LF。所以在没有计算机之前,需要同时使用CRLF来表示起一个新行。


答2:

        1中提到的回车和换行可以看做是两个操作,是两个动词,通过两个动作实现了换行,但是当出现计算机后,我们在写文本文件的时候,就需要在一行的结尾处做个标记来指示该换行了,所以Windows系统就沿用了打字机时代的名词,使用“回车符”+“换行符”表示到达当前行的结尾处。然而在计算机发展的早期存储设备相对昂贵,所以有的计算机专家认为用两个字符(回车+换行)表示行尾过于浪费,所以Unix系统只采用了“换行符”,而Mac系统只采用了“回车符”。

        因为'\r','\n'本身是一种语法的表示,所以此处以java语法为背景进行说明,其他语言的含义本质是相似,可类比理解。Java中有8个基本类型,其中一个为char型,而char型的常量有三种表示方式:1.由单引号括起的单个字符;2.由单引号括起的\+字符,例如‘\r’、'\n'、'\t';3.由单引号括起的\u+4位16进制,例如'\u000d','\u000a','\u0009'。其中2类字符表示的含义不再是'\'后的字符本身,而是表示一个新的意思,'\'称作转义字符。由于有的字符能够显示在屏幕上,有的不能,所以需要一种方式来表示那种无法显示在屏幕上的字符,采用转义字符('\')就是为了这个目的。而在我所知道的语言的中,'\r'都表示“回车符”,'\n'都表示"换行符"。所以'\r'、'\n'是回车符和换行符的一种符号表示。

        如果浏览器的控制台中书写如下Javascript代码:alert("我是第一行\n我是第二行"),会看到此行文字分两行显示,读者可自行尝试一下。