1. 程式人生 > 其它 >換行與回車(\r \n)的起源以及在編制語言中的使用

換行與回車(\r \n)的起源以及在編制語言中的使用

技術標籤:450-作業系統及相關130-Web語言換行回車HTMLVB

ASCII 轉義字元(Escape Character)

\r 和 \n 屬於轉義字元。那轉義字元是什麼呢?為什麼需要轉義字元呢? 這得從ASCII 碼說起。

起源

直觀來說, 電腦只能識別電流的強弱,比如強電流標識為1, 弱電流標識為0。這也就是電腦採用的二進位制的原理, 0和1如何用來表達人類10進位制的資料以及豐富的字元呢?
將多個位數的二進位制與十進位制進行轉換就可以達成這個目標,這其中又衍生了八進位制以及十六進位制。
除了數字,字母、漢字又怎麼標識呢? 這一整天就需要一個規則和標準了。ASCII (American Standard Code for Information Interchange,美國資訊互換標準程式碼)是由美國於1967就定義了的標準,其基於拉丁字母定義了一套電腦的編碼標準, 使用單個位元組,也就是8個位元位進行編碼,排除首位作為符號位,7個二進位制位的0、1 組合,總共包含 2^7 = 128個字元。這128個字元可以分為兩類:

  • 可顯示字元:可以通過鍵盤輸入並顯示,總共95個: 比如
    • 0 (0011 0000, 十進位制48)
    • 1 (0011 0001, 十進位制49)
    • a (0110 0001, 十進位制97)
  • 控制字元:無法直接顯示或是無法從鍵盤輸入的字元,總共33個,比如:
    • 換行 LF,(0000 1010, 十進位制10)
    • 回車,CR ,(0000 1101, 十進位制13)
    • 響鈴, BEL(0000 0111, 十進位制7)

因為控制字元無法在顯示屏直接顯示,或是無法從鍵盤輸入,如果要記住這些編碼,比較不方便,也不容易。於是針對這些字元用一些比較容易記住的方式來轉換,也就是轉義字元。轉義字元以反斜線後面加字元或是數字來表示,常見的轉義字元如下:

轉義字元十進位制ASCII意義
\a響鈴,BEL
\b退格,BS
\n換行 LF
\r回車 CR
\t水平製表 HT
\v垂直製表 VT
\ddd三位八進位制
\xhh十六進位制數

程式語言中的使用

C、Java、Python等程式語言中可以直接使用轉義字元, 以\a 響鈴為例, 其效果是電腦發出“嘀”的一聲。
在C和Python中可以通過print()函式使用。

  • C:printf("%c",'\a');
  • Python:print("\a")
    在Java中不能直接Print響鈴轉義符,但是其他轉義符可以。

HTML轉義字元

HTML 語言使用<html>、<titile>等標籤來顯示頁面,所以 < > 這樣的符號在HTML語言中有特殊的意義,如果的確要使用這些字元的話,就需要進行一層轉換, 稱為HTML的轉義字元。

所以, HTML語言除了支援標準的ASCII轉義字元外,自身也有一套需要轉義字元的機制。HTML自身的轉義字元以&開頭。
&後面可以接轉義字元,也可以直接使用十進位制數字,比如:

字元轉義字元十進位制描述
"&quot;&#34;引號
&&amp;&#38;and符號
<&lt;&#60;左尖括號
>&gt;&#62;右尖括號
空格&nbsp;&#160;

\r 與 \n

  • \r , 回車, r 是return 的簡寫
  • \n, 換行, newline.
    在文字編輯時,回車和換行的游標都會移到下一行,但位置不一樣,回車會到行首。在不同的作業系統中,每行結尾的處理不同:
  • Windows, 結尾是”\r\n“, 回車+換行
  • Unix,結尾 \n, 只有換行
  • Mac, 結尾 \r 只有回車。
    所以同一份檔案,在不同的作業系統開啟的話, 看到的效果會不一樣, 比如Mac/Unix檔案在Windows開啟會變成一行。
    為什麼會出現這種差異呢?
    在計算機出現之前,使用電傳打字機(Teletype Model 33)來打字,每秒鐘可以打10個字元。但是它有一個問題,就是打完一行換行的時候,要用去0.2秒,正好可以打兩個字元。要是在這0.2秒裡面,又有新的字元傳過來,那麼這個字元將丟失。
    於是,研製人員想了個辦法解決這個問題,就是在每行後面加兩個表示結束的字元。一個叫做―回車‖,告訴打字機把列印頭定位在左邊界;另一個叫做―換行‖,告訴打字機把紙向下移一行。 這就是―換行‖和―回車‖的來歷,從它們的英語名字上也可以看出一二。
    後來,計算機發明瞭,這兩個概念也就用在計算機上。那時,儲存器很貴,一些科學家認為在每行結尾加兩個字元太浪費了,加一個就可以。於是,就出現了分歧。 Unix系統裡,每行結尾只有―<換行>‖,即―\n‖; Windows系統裡面,每行結尾是 ―<換行><回車>‖,即―\n\r‖; Mac系統裡,每行結尾是―<回車>‖。一個直接後果是,Unix/Mac 系統下的檔案在Windows裡開啟的話,所有文字會變成一行;而Windows裡的檔案在Unix/Mac下開啟的話,在每行的結尾可能會多出一個^M 符號。

chr(10) chr(13)

在VB 和Oracle中提供了chr()函式獲取換行和回車。

select chr(13) from dual;
select chr(16) from dual;