換行與回車(\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的轉義字元。
&後面可以接轉義字元,也可以直接使用十進位制數字,比如:
字元 | 轉義字元 | 十進位制 | 描述 |
---|---|---|---|
" | " | " | 引號 |
& | & | & | and符號 |
< | < | < | 左尖括號 |
> | > | > | 右尖括號 |
空格 | |   |
\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;