CRLF是什么東西?
對于CRLF這個詞來說,相信搞開發(fā)的應(yīng)該都不會陌生,其意思是回車換行。
但是對于這個普遍解釋,我還有以下兩點疑問:
1.為什么CR代表回車,LF代表換行?
2.回車和換行到底是什么東西,'\r','\n'又是什么東西?
答1:
? ? ? ? 關(guān)于為什么用CRLF代表回車換行,則要提一下一個歷史問題,相信大家在電視上看美國一些老電影的時候都看過打字員使用打字機(jī)的場景,當(dāng)打字到一行尾部的時候,機(jī)器會有兩個操作,一個是打印的針頭會調(diào)回到開始處;另一個是打印紙同時會向下移動一行。對于前者就叫做Carriage Return(Carriage Return可以翻譯為機(jī)器滑動的部分回到開始處)簡寫即為CR;而后者就叫做Line Feed(Line Feed有行滿的意思),簡稱LF。所以在沒有計算機(jī)之前,需要同時使用CRLF來表示起一個新行。
答2:
? ? ? ? 1中提到的回車和換行可以看做是兩個操作,是兩個動詞,通過兩個動作實現(xiàn)了換行,但是當(dāng)出現(xiàn)計算機(jī)后,我們在寫文本文件的時候,就需要在一行的結(jié)尾處做個標(biāo)記來指示該換行了,所以Windows系統(tǒng)就沿用了打字機(jī)時代的名詞,使用“回車符”+“換行符”表示到達(dá)當(dāng)前行的結(jié)尾處。然而在計算機(jī)發(fā)展的早期存儲設(shè)備相對昂貴,所以有的計算機(jī)專家認(rèn)為用兩個字符(回車+換行)表示行尾過于浪費,所以Unix系統(tǒng)只采用了“換行符”,而Mac系統(tǒng)只采用了“回車符”。
? ? ? ? 因為'\r','\n'本身是一種語法的表示,所以此處以java語法為背景進(jìn)行說明,其他語言的含義本質(zhì)是相似,可類比理解。Java中有8個基本類型,其中一個為char型,而char型的常量有三種表示方式:1.由單引號括起的單個字符;2.由單引號括起的\+字符,例如‘\r’、'\n'、'\t';3.由單引號括起的\u+4位16進(jìn)制,例如'\u000d','\u000a','\u0009'。其中2類字符表示的含義不再是'\'后的字符本身,而是表示一個新的意思,'\'稱作轉(zhuǎn)義字符。由于有的字符能夠顯示在屏幕上,有的不能,所以需要一種方式來表示那種無法顯示在屏幕上的字符,采用轉(zhuǎn)義字符('\')就是為了這個目的。而在我所知道的語言的中,'\r'都表示“回車符”,'\n'都表示"換行符"。所以'\r'、'\n'是回車符和換行符的一種符號表示。
? ? ? ? 如果瀏覽器的控制臺中書寫如下Javascript代碼:alert("我是第一行\(zhòng)n我是第二行"),會看到此行文字分兩行顯示,讀者可自行嘗試一下。