回車與換行的故事

帥地發表於2018-08-24

以前在學彙編的時候,一直不知道老師在換行時,總會打一個換行符回車符,原來他們還有這麼一個故事....

在很久以前,有一種叫做電傳打字機(Teletype Model 33 ASR) 的機器,那時候還沒有計算機這種玩意。在這種打字機上,有一個叫Carriage的部件,它是打字頭,相當於打字機的游標。每輸入一個字元,游標就會前進一格。當輸入的字元滿一行後,游標重新從下一行的最左邊開始列印。

這個時候會觸發兩個動作,一個是把游標在垂直方向上向下移,一個是在水平方向上把游標移動到最左邊。然後這種打字機每秒可以打10個字元,相當於0.1秒打一個字元;而要完成這兩個動作需要花費0.2秒的時間,如果在這0.2秒中,有新的字元傳過來的話,那麼這些字元將會丟失。

為了解決這個字元丟失的問題,研製人員就在每行的後面新增了兩個表示一行結束的字元:一個叫回車(carriage return),相當於告訴打字機,把游標在水平方向上移到最左邊;一個叫換行(line feed),相當於告訴打字機,在垂直方向上把游標移動到下一行。

這就是回車換行的由來。

後來,計算機出現了,這兩個概念也被拿了過來。但是那時候儲存裝置非常昂貴,一些人認為用兩個字元用來表示一行的結尾非常浪費,於是產生了分支,不同的廠商有不同的處理方法。

在這些作業系統中,Unix作業系統每行結尾只有換行,即"\n";Windows則是回車+換行,即“\r\n”;而Mac系統裡則使用回車來代表結尾,即“\r”。

正是這個原因,才會導致我們有時用Windows系統來開啟Unix/Mac系統的檔案時,會出現所有文字變成一行的情況,而用Unix和Mac系統開啟Windows系統的檔案時,在每一行的結尾會多出一個 ^M 的字元。

關注公我的眾號:苦逼的碼農,獲取更多原創文章,後臺回覆禮包送你一份特別的資源大禮包。

相關文章