CRLF、CR、LF詳解
很長一段時間裡,對於CRLF、CR、LF的理解僅限於不同作業系統下對換行符的定義。所謂知其然需知其所以然,從學習中找到樂趣,對知識的記憶才會更加深刻。
名詞解釋
- CR:Carriage Return,對應ASCII中轉義字元\r,表示回車
- LF:Linefeed,對應ASCII中轉義字元\n,表示換行
- CRLF:Carriage Return & Linefeed,\r\n,表示回車並換行
眾所周知,
Windows作業系統採用兩個字元來進行換行,即CRLF;
Unix/Linux/Mac OS X作業系統採用單個字元LF來進行換行;
另外,MacIntosh作業系統(即早期的Mac作業系統)採用單個字元CR來進行換行。
野史
老式機械打字機(來源:視覺中國)
據野史記載,在很久以前的機械打字機時代,CR和LF分別具有不同的作用:LF會將列印紙張上移一行位置,但是保持當前打字的水平位置不變;CR則會將“Carriage”(打字機上的滾動托架)滾回到列印紙張的最左側,但是保持當前打字的垂直位置不變,即還是在同一行。
當CR和LF組合使用時,則會將列印紙張上移一行,且下一個打字位置將回到該行的最左側,也就是我們今天所理解的換行操作。
隨著時間的推移,機械打字機漸漸地退出了歷史舞臺,當初的紙張變成了今天的顯示器,打字機的按鍵也演變為了如今的鍵盤。在作業系統出現的年代,受限於記憶體和軟盤空間的不足,一些作業系統的設計者決定採用單個字元來表示換行符,如Unix的LF、MacIntosh的CR。他們的意圖都是為了進行換行操作,只是當初並沒有一個國際標準(或者其他原因,鬼知道),所以才有這樣字元上的不同。
結論
許多現代的文字編輯器和命令列工具都提供了可選擇的換行符配置,方便使用者按照自己的意願來改變換行符的表現形式,所以我們只需要知道CRLF、CR、LF的作用即可。
參考文獻
http://en.wikipedia.org/wiki/Newline
https://en.wikipedia.org/wiki/Control_character
https://stackoverflow.com/questions/1552749/difference-between-cr-lf-lf-and-cr-line-break-types