“回車(chē)”(CR,Carriage Return)和“換行”(LF社付,Line Feed)
在文本處理中, CR, LF, CR/LF 是不同操作系統(tǒng)上使用的換行符:
- Dos 和 windows 采用“回車(chē)+換行承疲,CR/LF”表示下一行;
- UNIX/Linux 采用“換行符鸥咖,LF”表示下一行燕鸽;
- 蘋(píng)果機(jī)(MAC OS 系統(tǒng))則采用“回車(chē)符,CR”表示下一行啼辣。
CR 用符號(hào)'\r'表示, 十進(jìn)制ASCII代碼是 13, 十六進(jìn)制代碼為 0x0D;
LF 使用'\n'符號(hào)表示啊研,ASCII代碼是 10, 十六制為 0x0A。
所以 Windows 平臺(tái)上換行在文本文件中是使用 0d 0a 兩個(gè)字節(jié)表示鸥拧,而 UNIX 和蘋(píng)果平臺(tái)上換行則是使用 0a 或 0d 一個(gè)字節(jié)表示悲伶。
一般操作系統(tǒng)上的運(yùn)行庫(kù)會(huì)自動(dòng)決定文本文件的換行格式,如一個(gè)程序在 windows 上運(yùn)行就生成 CR/LF 換行格式的文本文件住涉,而在 Linux 上運(yùn)行就生成 LF 格式換行的文本文件麸锉。
在一個(gè)平臺(tái)上使用另一種換行符的文件文件可能會(huì)帶來(lái)意想不到的問(wèn)題,特別是在編輯程序代碼時(shí)舆声,有時(shí)候代碼在編輯器中顯示正常, 但在編輯時(shí)卻會(huì)因?yàn)閾Q行符問(wèn)題而出錯(cuò)花沉。
很多文本/代碼編輯器帶有換行符轉(zhuǎn)換功能,,使用這個(gè)功能可以將文本文件中的換行符在不同格式單互換媳握。
在不同平臺(tái)間使用 FTP 軟件傳送文件時(shí)碱屁,在 ASCII 文本模式傳輸模式下, 一些 FTP 客戶(hù)端程序會(huì)自動(dòng)對(duì)換行格式進(jìn)行轉(zhuǎn)換蛾找,經(jīng)過(guò)這種傳輸?shù)奈募止?jié)數(shù)可能會(huì)發(fā)生變化娩脾,如果你不想 FTP 修改原文件,可以使用 bin 模式(二進(jìn)制模式)傳輸文本打毛。
在計(jì)算機(jī)還沒(méi)有出現(xiàn)之前柿赊,有一種叫做電傳打字機(jī)(Teletype Model 33,Linux/Unix下的tty概念也來(lái)自于此)的玩意幻枉,每秒鐘可以打 10 個(gè)字符碰声。但是它有一個(gè)問(wèn)題,就是打完一行換行的時(shí)候熬甫,要用去0.2秒胰挑,正好可以打兩個(gè)字符。要是在這 0.2 秒里面,又有新的字符傳過(guò)來(lái)瞻颂,那么這個(gè)字符將丟失豺谈。
于是,研制人員想了個(gè)辦法解決這個(gè)問(wèn)題贡这,就是在每行后面加兩個(gè)表示結(jié)束的字符茬末。一個(gè)叫做“回車(chē)”,告訴打字機(jī)把打印頭定位在左邊界藕坯;另一個(gè)叫做“換行”,告訴打字機(jī)把紙向下移一行噪沙。這就是“換行”和“回車(chē)”的來(lái)歷炼彪,從它們的英語(yǔ)名字上也可以看出一二。
后來(lái)正歼,計(jì)算機(jī)發(fā)明了辐马,這兩個(gè)概念也就被搬到了計(jì)算機(jī)上。那時(shí)局义,存儲(chǔ)器很貴喜爷,一些科學(xué)家認(rèn)為在每行結(jié)尾加兩個(gè)字符太浪費(fèi)了,加一個(gè)就可以萄唇。于是檩帐,就出現(xiàn)了分歧。
Unix系統(tǒng)里另萤,每行結(jié)尾只有“<換行>”湃密,即"\n";
Mac系統(tǒng)里四敞,每行結(jié)尾是“<回車(chē)>”泛源,即"\r";
Windows系統(tǒng)里面忿危,每行結(jié)尾是“<換行><回車(chē) >”达箍,即“\n\r”。
一個(gè)直接后果是铺厨,Unix/Mac系統(tǒng)下的文件在 Windows里打開(kāi)的話(huà)缎玫,所有文字會(huì)變成一行;而Windows里的文件在Unix/Mac下打開(kāi)的話(huà)解滓,在每行的結(jié)尾可能會(huì)多出一個(gè)^M符號(hào)碘梢。
原文鏈接:
http://www.cppblog.com/prayer/archive/2009/08/19/93854.html