回車符號和換行符號產生背景:
關於“回車”(carriage return)和“換行”(line feed)這兩個概念的來歷和區別。在計算機還沒有出現之前,有一種叫做電傳打字機(Teletype Model 33)的玩意,每秒鍾可以打10個字符。但是它有一個問題,就是打完一行換行的時候,要用去0.2秒,正好可以打兩個字符。要是在這0.2秒里面,又有新的字符傳過來,那么這個字符將丟失。
於是,研制人員想了個辦法解決這個問題,就是在每行后面加兩個表示結束的字符。一個叫做“回車”,告訴打字機把打印頭定位在左邊界;另一個叫做“換行”,告訴打字機把紙向下移一行。這就是“換行”和“回車”的來歷,從它們的英語名字上也可以看出一二。
后來,計算機發明了,這兩個概念也就被般到了計算機上。那時,存儲器很貴,一些科學家認為在每行結尾加兩個字符太浪費了,加一個就可以。於是,就出現了分歧。
Unix系統里,每行結尾的行結束符只有“<換行>”,即:“\n”;Windows系統里面,每行結尾的行結束符是“ <回車><換行>”,即:“\r\n”;Mac系統里,每行結尾的行結束符是“<回車>”,即:“\r”。一個直接后果是,Unix/Mac系統下的文件在Windows里打開的話,所有文字會變成一行;而Windows里的文件在Unix/Mac下打開的話,在每行的結尾可能會多出一個^M符號。
具體區別:
區別一:不同系統對於換行符和回車符的解析
先生成一個換行(\n, 0x0A)和回車(\r, 0x0D)組合的文本
$ echo -en '12\n34\r56\n\r78\r\n' > tmp
以十六進制方式查看文本
$ od -t x1 tmp
0000000 31 32 0a 33 34 0d 35 36 0a 0d 37 38 0d 0a
0000016
在Linux的vim中的顯示效果:

在windows的記事本中的顯示效果

可見Linux中遇到換行符會進行回車+換行的操作,回車符反而只會作為控制字符顯示,不發生回車的操作。而windows中要回車符+換行符才會回車+換行,缺少一個控制符或者順序不對都不能正確的另起一行。
區別二:Enter鍵輸入的行結束符是換行符還是回車符?
在網上有這樣一種說法,是說在Windows中Enter鍵輸入的是\n\r,而Unix系統中Enter鍵輸入的是\n,Mac系統中Enter鍵輸入的是\r。
區別三:回車符和換行符在編程方面的區別?
編程相關:
文本文件的行結束符,傳統上
Windows 用CRLF
蘋果機 用CR
UNIX 用LF
CR -- 回車符,C語言'\r'
LF -- 換行符,C語言'\n'
在不同計算機上C語言標准庫將文本文件的行結束符一律變成一個符號LF,也就是換行符,也就是new line符,也就是'\n'。那么,對於Windows機而言——“回車和換行符轉換成一個換行符”即:文本文件行結束符,CRLF讀入后,丟掉CR,留LF。
例如:在Windows平台下,fgets()讀入一行,行尾只會有LF,而沒有CR。
再不使用C語言標准庫解析文本文件內容時,常常要碰到判定回車換行的地方,這個時候就要注意既要判定"\r\n"又要判定"\n"或“\r”。此時得到一行,將其進行去掉"\r\n"或"\n"或“\r”,這樣就能得到你所需要的字符串了。
'\n' 0x0a 10 換行符(newline)
'\r' 0x0d 13 回車符(return)
備注:如何將Linux系統中的windows格式的文件轉化為unix格式呢?使用dos2unix命令即可
安裝:yum install -y dos2unix
轉換:dos2unix 文件名
