在計算機尚未出現以前,有一種叫作電傳打字機(Teletype Model 33)的玩意,每秒鐘能夠打10個字符。可是它有一個問題,就是打完一行,須要回車換行,此過程,要用去0.2秒,正好能夠打兩個字符。要是在這0.2秒裏面,又有新的字符傳過來,那麼這個字符將丟失。 php
因而,研製人員想了個辦法解決這個問題,就是在每行後面加兩個表示結束的字符。一個叫作「回車」,告訴打字機把打印頭定位在左邊界;另外一個叫作「換行」,告訴打字機把紙向下移一行。 html
首先,打字機打完一行,意味着,從左到右把一行的字打完了,此時打印機的打印頭處於最右邊,因此,想要繼續打字,須要(1)將把打印頭移動到最左邊,而後(2)打字所用的紙張,換到下一行。 linux
而(1)打印頭移動到最左邊的動做,稱之爲回車; shell
(2)打字所用的紙張換到下一行,稱之爲換行。其是經過打字機的滾筒滾動,將紙向前滾動,就至關於打印頭換了一行,處在新一行的最左邊的開始的位置了,即所謂的走紙。 express
這就是「回車」和「換行」的來歷,從它們的英語名字上也能夠看出一二。 windows
對應到計算機系統中: app
回車:將當前光標移動到同一行中的最左邊(假設是從左到右的輸入方式) 編輯器
換行:保持當前光標的水平位置位置不變,換到下一行。 工具
所以,將回車和換行聯合起來,纔是咱們所常理解的含義: 測試
輸入完一行後,回車換行到下一行,即光標不只僅是回到了最左邊,並且也換到了下一行。
後來,計算機發明瞭,這兩個概念也就被般到了計算機上。那時,存儲器很貴,一些科學家認爲在每行結尾加兩個字符太浪費了,加一個就能夠。因而,就出現了分歧。
不一樣的系統裏面,對於一樣一個」回車換行」的含義,所用的字符不一樣:
Table 1 不一樣系統中回車換行對應的字符
系統類型 |
回車換行所用字符 |
Linux/Unix |
\n = Newline = 0x0A = 10 = LF =Line Feed = 換行 = Ctrl + J |
Mac |
\r = Return = 0x0D = 13 = CR = Carriage Return = 回車 = Ctrl + M |
Windows/Dos |
\r \n = 0x0D 0x0A = CR LF = 回車 換行 |
提示:
1. 對應的,在Linux中經過鍵盤輸入Enter回車鍵,輸入的是\n=0x0A, 而Windows中的Enter鍵則是輸入的是0x0D 0x0A。
2.其中關於0x0A對應的着Ctrl + J,0x0D對應着Ctrl + M等等相關的ASCII的控制字符及輸入方式,可參見:
3.後來看到How to use regular expressions in Notepad++ (tutorial)中的解釋得知,原來Mac 9及以前版本,是用EOL字符做爲換行符的,OSX及以後,纔開始用\n表示換行。
因爲Linux用\n=0x0A=10=LF來表示換行,因此,打開Windows中的文件的時候,若是其中有換行,即其中有\r \n= 0x0D 0x0A,此時,就會被處理爲,只將n理解爲換行,而把r看做爲一個單獨的字符,此r字符,對應ASCII的值是0x0D=13,是個控制字符,對應的是用Ctrl+M=一個Ctrl加上一個大寫的M字符,在Linux中的文本編輯器中,如Vi中,對應顯示爲一個「^M「。
解決辦法:
(1)Linux下,用命令:
tr-d"15"< myfile.txt > myfile_new.txt
將其中^M去除掉。其中15中的015是八進制的15=十進制的13=十六進制的0x0D。
(2)或者用dos2unix工具處理:
dos2unix file_name
詳情參見:
http://www.crifan.com/order_how_to_cancel_under_linux_vi__m_symbol_in_the_display/
同理,Mac中打開Windows中的文件,若是有回車換行的話,只會識別其中的\r=0x0D,而將餘下的\n=0xA=LF當作一個單獨的字符,顯示出「^J」。
通過測試,發現,在windows中,估計把原先的0x0D 0x0A去掉其中任何一個的話,而後用windows下的文本類編輯器再去打開,發現:
除了最簡單的Windows自帶的Notepad,沒法正常識別回車換行,內容被顯示到同一行中以外;其餘一些編輯器,如Notepad2,Notepad++,Windows自帶的記事本WordPad,均可以正常識別成回車換行,不會將內容都輸出在同一行。
對應的,也能夠經過Notepad++來實如今Linux,Windows,Mac這三種格式中來回轉換,詳情參考:
Notepad++中Windows,Unix,Mac三種格式之間的轉換
1. 回車與換行的故事
http://huangyunbin.iteye.com/blog/1112171
2. Carriage return
http://en.wikipedia.org/wiki/Carriage_return
3. 回車和換行的區別
http://bbs.chinaunix.net/thread-393307-1-1.html
4. 回車和換行有什麼區別?咱們平時按下的Enter鍵是回車仍是換行?[原創]
http://www.52rd.com/blog/Detail_RD.Blog_imjacob_12317.html
5. 【整理】回車(\r, return, CR, Carriage Return)和換行(\n, newline, LF, Line Feed)有什麼區別