1. 程式人生 > >ASII碼中控制字元CR和LF的含義

ASII碼中控制字元CR和LF的含義

CR意思是carriage return,回車,\r,ASCII碼為13

LF意思是linefeed,換行,\n,ASCII碼為10

當你用一個打字機的時候,asdfghjkl;'右邊的那個按鈕(在計算機鍵盤上,就對應著那個Enter鍵)被按下的時候,打字機的紙張捲動一行,而紙張的水平位置並不變化。打字機上另外還有一個手柄,那個手柄是專用來“回車”的,向左搬動那個手柄的時候,裝紙的結構被鬆開,在彈簧的作用下彈回最右邊(相當於列印頭回到最左邊)。

所以當我們要換行的時候,實際需要兩步操作,回車+換行(或者反過來),所以,在VB(含VBScript)裡面有一個字串常量叫做vbCrLf,意思就是回車+換行。CR+LF也是多種協議規定的標準行結束符(RFC0821-SMTP,RFC1939-POP,RFC2060-IMAP,RFC2616-HTTP),在DOS和Windows中,需要另起一行的時候也需要這兩個字元。

在Windows的記事本中建立一個文件,直接儲存的話你會發現這個檔案大小是0位元組(儲存為ANSI編碼),然後,開啟這個檔案,敲入一個回車符,儲存,你會發現這個檔案的大小變成了2位元組。

但是,為什麼在C語言裡面只用LF(\n)就可以換行呢?因為C語言的出現就是為了寫UNIX作業系統,而UNIX作業系統中以LF為行結束符,並且自動加上那個CR,以便節省一個位元組的長度(這樣做在當時儲存容量不大的計算機上確實是有意義的,而為了不斷相容,到現在這個規定也沒有改變)。在C語言中,執行庫會在顯示時把LF自動轉換為CR+LF(注意是執行庫,而不是編譯器,所以即使開啟EXE檔案,找到對應的位置,只能找到一個0x0A的LF,而沒有CR)。

現有的Linux仍然保持了只用LF當作行結束符的傳統,在Windows記事本中開啟這種在Linux下寫的文字檔案就會發現全部內容都在一行上,而在應該換行的地方有一個小黑塊,記事本只能處理Windows/DOS格式的文字檔案。

在Windows的GUI(圖形使用者介面)下,對於換行的要求其實並不嚴格,一般情況下用一個\n都能解決問題,所以在VB中寫Msgbox("blah...blah..." & Chr(13) & "blah...blah")或者在C語言中直接用含有\n的字串來呼叫一個Windows API(應用程式程式設計介面),都不會出現問題。

在另外一個主流的作業系統MacOS當中,行結束符是LF+CR,恰好和Windows相反,用記事本開啟這種檔案——記事本當然也無法處理這種行結束符——就不分行了,比Linux檔案的顯示方式還要噁心一些,因為,沒有一個記號告訴你,這裡是新的一行的開始。