程式學習日誌-\r\n v.s\n (冷知識)

Kayden
Dec 30, 2020

--

前言

內文為自行查看書籍、查閱網路資訊,或者利用程式自行嘗試後,進行整理幫助自我理解的學習日誌,並無商業行為,內容大多轉載於書籍以及他人的分享,來源皆附於文章下方的參考資料。此外內容表達的為自我的理解與解釋,並不保證一定正確,請僅以參考視之,若有錯誤歡迎告知。

Q:常看到\r\n和\n的之間的差異是甚麼?
A:其實是一樣的,\n只是\r\n的演變結果。

‘\r’是回車,’\n’是換行,前者使光標到行首,後者使光標下移一格,因此,\r 就是return 回到本行行首這就會把這一行以前的輸出覆蓋掉。通常用的Enter是兩個加起來。

# input
print (A\rB)
# output
B
# input
print (A\nB)
# output
A
B

演變歷史

這個是以前還沒有計算機只有打字機的時候所發明出來的,打字機在打字時需要告訴打字機目前打字的位置(也就是光標的位置),以及打在第幾行,因此當一行打完要換到下一行時,同時調整打字機這兩件事,因此有了 \r 調整光標位置、 \n 調整至下一行。但當發明了計算機後,這key in的概念也搬至計算機設計上,後來為了節省儲存空間(因為儲存器很昂貴),認為在每行結尾加兩個字符太浪費了,加一個( \n )就可以,於是出現了兩種換行方式。

各語言中「換行」的表示

\r\n通常是微軟的文件會產生的,在其它的編輯器裡面,會在一行的節尾看到 ^M,那就是\r\n

在php中,字串中的\r\n或\n,要用雙引號才有效。

使用php在unix裡面跑資料(ex: php –f test.php),要出現換行請使用\r\n

在vim中,如果要用取代的方式來換行 (:1,$s/./&\r/g 把每個字都換行),請用 \r

在javascript裡面,換行請使用 \n(\r有時候失效)

參考資料:
●\r\n和\n的差異(https://seacatcry.pixnet.net/blog/post/13732061)

--

--