2023-03-23 \r,\n,\r\n的區(qū)別(詳解)

回車、換行的區(qū)別

Enter = 回車+換行(\r\n)
理解:

  • \n是換行,英文是New line
  • \r是回車,英文是Carriage return


    image.png

    unix換行:\n(0x0A)

MAC回車:\r(0x0D)

WIN回車換行:\r\n(0x0D,0x0A)

歷史介紹

他們間的區(qū)別其實(shí)是個(gè)回車換行的問題

先來段歷史

回車”(Carriage Return)和“換行”(Line Feed)這兩個(gè)概念的來歷和區(qū)別。
符號 ASCII碼 意義

\n 10 換行

\r 13 回車CR

在計(jì)算機(jī)還沒有出現(xiàn)之前,有一種叫做電傳打字機(jī)(Teletype Model 33,Linux/Unix下的tty概念也來自于此)的玩意,每秒鐘可以打10個(gè)字符。但是它有一個(gè)問題,就是打完一行換行的時(shí)候,要用去0.2秒,正好可以打兩個(gè)字符。要是在這0.2秒里面,又有新的字符傳過來,那么這個(gè)字符將丟失。

于是,研制人員想了個(gè)辦法解決這個(gè)問題,就是在每行后面加兩個(gè)表示結(jié)束的字符。一個(gè)叫做“回車”,告訴打字機(jī)把打印頭定位在左邊界;另一個(gè)叫做“換行”,告訴打字機(jī)把紙向下移一行。這就是“換行”和“回車”的來歷,從它們的英語名字上也可以看出一二。

后來,計(jì)算機(jī)發(fā)明了,這兩個(gè)概念也就被般到了計(jì)算機(jī)上。那時(shí),存儲器很貴,一些科學(xué)家認(rèn)為在每行結(jié)尾加兩個(gè)字符太浪費(fèi)了,加一個(gè)就可以。于是,就出現(xiàn)了分歧。

不同系統(tǒng)之間的區(qū)別

在Windows中:

'\r' 回車,回到當(dāng)前行的行首,而不會換到下一行,如果接著輸出的話,本行以前的內(nèi)容會被逐一覆蓋;

'\n' 換行,換到當(dāng)前位置的下一行,而不會回到行首;

Unix系統(tǒng)里,每行結(jié)尾只有“<換行>”,即"\n";Windows系統(tǒng)里面,每行結(jié)尾是“<回車><換行>”,即“\r\n”;Mac系統(tǒng)里,每行結(jié)尾是“<回車>”,即"\r";。一個(gè)直接后果是,Unix/Mac系統(tǒng)下的文件在Windows里打開的話,所有文字會變成一行;而Windows里的文件在Unix/Mac下打開的話,在每行的結(jié)尾可能會多出一個(gè)^M符號。
Linux中遇到換行符("\n")會進(jìn)行回車+換行的操作,回車符反而只會作為控制字符("^M")顯示,不發(fā)生回車的操作。而windows中要回車符+換行符("\r\n")才會回車+換行,缺少一個(gè)控制符或者順序不對都不能正確的另起一行。

注意點(diǎn):

在解析文本或其他格式的文件內(nèi)容時(shí),常常要碰到判定回車換行的地方,這個(gè)時(shí)候就要注意既要判定"\r\n"又要判定"\n"。

寫程序時(shí)可能得到一行,將其進(jìn)行trim掉'\r',這樣能得到你所需要的string了。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容