天天看點

python回車和換行的差別_回車與換行的差別(轉)

add by zhj: 不同作業系統下換行符不同,如下:

\n: UNIX

\n\r: window

\r: MAC OS

我們經常遇到的一個問題就是,Unix/Mac系統下的檔案在Windows裡打開的話,所有文字會變成一行;而Windows裡的檔案在Unix/Mac下打開的話,在每行的結尾可能會多出一個^M符号。

在輸入文本時,Enter鍵一敲,就開始了新的一行,這個習慣性用法難免誤導 C/C++ 的初學者們對 回車符(CR, Carriage Return)'\r' 和 換行符(LF, Linefeed)'\n' 的了解,這裡這個問題我們暫且放下,後文再談。先讓我們來看看關于“回車”的有趣曆史來源。

關于“Enter鍵”的來曆,要追朔到機械英文打字機的時代。在這種打字機上有個叫“字車”的部件,大概就是下面那個部分,會左右不停地跑的那東西。

python輸入和換行的差別_輸入與換行的差別(轉)

當輸滿一行後,使用者就要把“字車”推到起始位置,這時打字機就會有兩個動作,一是“字車”歸位,二是滾筒上卷一行(相當于“字車”下移一行),這樣就可以開始輸入下一行了,這裡推動“字車”的動作就稱為“回車”。

上述打字機的“字元”歸位的動作就相當于我們的 回車 '\r',隻回到行首而仍在目前行,而滾筒上卷的動作就相當于 換行 '\n',移動到下一行。回車符 '\r' 對應 ASCII 碼的16進制是 0x0d,10進制是 13,換行符 '\n' 對應16進制是 0x0a, 10進制是 10。

而不同的系統對回車的處理是不同的:在我們常用的 Windows 系統中用 "\r\n"兩個字元來表示,如圖,在第一行與第二行之間有兩個字元位,分别是 0D 0A,即 ASCII 碼對應的 '\r'和'\n'。這樣的表示方法就和打字機的行為很相似了。

python輸入和換行的差別_輸入與換行的差別(轉)
python輸入和換行的差別_輸入與換行的差別(轉)

那麼,同樣的方法,在 Linux 上會是什麼情況呢?請繼續看。

python輸入和換行的差別_輸入與換行的差別(轉)
python輸入和換行的差別_輸入與換行的差別(轉)

在 Linux 上通過 vim 我們看到,在 a, ab, abc 之間隻有一個字元位了,對應的是 0a,即 ASCII 碼中的 '\n',這就說明在 Linux 上隻用了一個換行字元來表示。