換行與回車(\r \n)的起源以及在編制語言中的使用
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自身的轉義字元以&開頭。
&後面可以接轉義字元,也可以直接使用十進位制數字,比如:
字元 | 轉義字元 | 十進位制 | 描述 |
---|---|---|---|
" | " | " | 引號 |
& | & | & | 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;
相關文章
- 回車與換行的故事
- 正規表示式.號元字元(除了回車符\r和換行符\n)字元
- R語言中的生存分析R語言
- 在R語言中,因子是什麼R語言
- R語言中na.omit函式的應用 以及 在資料框中的應用R語言MIT函式
- 【R語言入門】R語言中的變數與基本資料型別R語言變數資料型別
- Android 回車換行的持久化Android持久化
- R 語言中取色器
- 回車和換行
- 在Go語言中,怎樣使用Json的方法?GoJSON
- Go語言中切片slice的宣告與使用Go
- R語言中安裝 maptools 包R語言APT
- static在C語言中的作用C語言
- R語言中根據列名刪除指定的列R語言
- Go 語言中的 collect 使用Go
- 【R資料科學讀書筆記】R語言中的管道操作資料科學筆記R語言
- R 語言中雙中括號 [[]]與資料型別列表的關係資料型別
- Linux - 回車符和換行符及其在不同系統上的區別Linux
- R語言中管道符號 %>% 的應用 及 舉例R語言符號
- R語言中如何將科學計數法轉換為數值型R語言
- C語言中printf打出2進位制與16進位制數C語言
- 在c語言中輸出8進位制數,16進位制數C語言
- hash 表在 go 語言中的實現Go
- conda 安裝R以及在 Jupyter Notebook中執行 R 程式碼
- 在 Go 語言中,我為什麼使用介面Go
- 【換行符】Windows、Unix、Mac不同作業系統的回車符 和換行符 WindowsMac作業系統
- c語言以及高階語言中的float到底是什麼以及IEEE754C語言
- R語言中提取檔名和檔名R語言
- 聊聊Go語言中的陣列與切片Go陣列
- 在嵌入式C語言中使用結構的方法有哪些C語言
- 淺談C語言中函式的使用C語言函式
- GO語言中string和[]byte的區別及轉換Go
- [20210802]cygwin文字回車換行問題.txt
- R語言中如何抽取向量的偶數項或者奇數項R語言
- Go語言中JSON標籤的用法與技巧GoJSON
- Python語言中/與//的區別是什麼?Python
- C語言中水平製表符 與退格鍵 的使用方法探索C語言
- C語言中編譯和連結C語言編譯