其實跳脫字元「\」(Escape Character)本身有相當多種的用法,可以拿來表示tab(\t),可以拿來換行(\n)等等,或是在要輸入特殊符號時使用,總之,只要某個符號有代表特殊意義時,就要透過它來做進一步的轉換,這邊紀錄的是關於色碼的用法(ANSI escape sequence),如果有玩過BBS色碼的人對此應該不陌生才對,例:
在BBS上文章貼出去之後*[0;31m這串文字是紅色的*[m 在BBS上文章貼出去之後這串文字是紅色的 |
這裡的「*」代表的是Escape這個字元(不是escape character "\",而是Escape本身,你可以想成是按了鍵盤上的Esc鍵一下後它傳入電腦的訊號),這個字元可以用\e來代表,所以說在其他程式語言裡只要依樣畫葫蘆組合Esc字元以及ANSI顏色的代碼就也能夠輸出彩色的文字。由於在各種語言中它的用法都差不多,所以我也不知道該不該放在個別語言的筆記頁面中,就先統整在這裡吧,可能未來再來修改。
在開始動手前,對照此ASCII代碼表(http://www.asciitable.com/)可知Esc以八進位表示的值是033,十進位值為27,因為有些電腦可能不支援\e的用法,這時就要用這些值來代替了,使用\033跟使用\e的效果是一樣的,甚至要用任何語言的ASCII轉字元函數轉換都可以。
備註:以下所處環境除非有特別註明,不然作業環境都是在Linux底下。# 原始碼 echo "\033[1;33m這串是無效的,因為少了-e\033[m" echo -e "\033[0;33m這串是一般的黃色,寫成[33m也行\033[m" echo -e "\033[1;33m這串是亮黃色\033[m" echo -e "\e[1;33m用\\\e雖然\\\e沒變色,但也沒問題\e[m" |
#
執行結果(./color.sh): 這串是無效的,因為少了-e 這串是一般的黃色,寫成[33m也行 這串是亮黃色 用\e雖然\e沒變色,但也沒問題 |
// 原始碼 printf("\033[7;32m顏色反轉的綠色字\033[m"); printf("\e[1;4;32m有底線的亮綠色字\e[m"); |
//執行結果
(cc color.c;
./a.out): 顏色反 轉的綠色字 有 底線的亮綠色字 |
! 原始碼 character:: ESC=achar(27) print*,"\033[1;35;45m深紫底的紫色字\033[m" print*,"\e[1;32m\\e的用法PGF不支援,但G77 ok" print*,ESC//"[;33m配合ESC的用法"//ESC//"[m" |
!
執行結果(pgf90 color.f90; ./a.out) ! Esc在ASCII Table中以十進位表示是27 深 紫底的紫色字 \e的用法PGF不支援,但G77 ok 配合ESC的用法 |
'
假設有一個Form,上面有一個textbox叫做Textbox1,以下程式碼放在表單啟動時 Dim ESC As Char = Strings.Chr(27) Me.TextBox1.Text = ESC & "[1;33mOK from VB" & ESC & "[m" ' 表單啟動後,該Textbox之內容為:" [1;33mOK from VB [m" ' 要注意在"["符號前各有一空格,那就是Esc字元,把這串貼上BBS將會看到:*[1;33mOK from VB*[m |
>>> print "\033[1;32m我是亮綠色\033[m" 我是亮綠色 >>> print "\033[92m我也是亮綠色\033[m" 我也是亮綠色 >>> print u"\u001b[93m把\\033換成unicode也ok\u001b[m" 把\033換成unicode也ok |
代碼 |
功能 |
1 |
亮色字 |
4 | 加底線 |
7 | 反轉顏色,將前景色、背景色互換 |
9 | 刪除線(BBS沒有) |
30 31 32 33 34 35 36 37 |
前景色 |
40 41 42 43 44 45 46 47 |
背景色 |
參考資料:
http://en.wikipedia.org/wiki/ANSI_escape_code
http://stackoverflow.com/questions/287871/print-in-terminal-with-colors-using-python