ANSI 色彩代碼是 Select Graphic Rendition (SGR) 逸出序列,用來要求終端機模擬器在前景與背景文字的八個基本與八個亮色調色盤位置之間切換。這些代碼本身是十進位數字,而不是具體的顏色:30 選擇黑色前景位置,91 選擇亮紅色前景位置,44 選擇藍色背景位置。一組可運作的序列以 ESC 控制位元起始,後接一個左方括號、一或多個以分號分隔的 SGR 參數,以及字母 m。在格式化文字之後,使用 ESC[0m 的重置指令可將終端機恢復為預設呈現方式,避免下一行被意外套上顏色。由於這些數字描述的是調色盤位置而非 RGB 數值,實際的視覺結果取決於使用者的終端機主題、色彩設定檔與輔助使用選項。ANSI 色彩代碼產生器會同時產生這些序列的可視逸出形式與原始控制位元,讓您能放心地貼到原始字串、測試資料,以及支援終端機的工具中。

SGR 逸出序列的結構
每個 SGR 序列都遵循相同的四段式結構:一個逸出位元 (0x1B)、一個左方括號、一串以分號分隔的十進位參數,以及結尾的字母 m。終端機會依序解讀這些數字。樣式參數通常置於色彩參數之前,雖然並非所有實作都嚴格強制樣式與色彩代碼之間的順序。產生器支援的三個樣式參數分別是 1 (粗體)、3 (斜體) 與 4 (底線),但目前介面僅提供粗體與底線。色彩參數分為兩組:基本代碼的前景範圍為 30 到 37,背景範圍為 40 到 47;而廣泛實作的 xterm 相容亮色延伸中,前景範圍為 90 到 97,背景範圍為 100 到 107。
當產生器建構前綴時,都會附加重置序列 ESC[0m。這個結尾的重置屬於一種防護機制而非絕對保證:目的端應用程式可能會以不同方式解讀串流、可能在結束時自行重置,或可能執行在會過濾該位元組序列的環境中。請務必將 ESC[0m 視為格式化區段的結束,而非下游輸出必定為純文字的保證。ECMA-48 定義了 SGR 與基本的呈現控制項,而 xterm 控制序列 文件則交叉驗證了多數現代終端機所使用的亮色對應。
16 個 SGR 色彩代碼表
每個調色盤位置都有固定的 SGR 編號。下表列出八個基本色彩及其對應的八個亮色版本,涵蓋前景與背景,並依多數終端機模擬器公開的順序排列。
| 色彩名稱 | 基本前景 | 基本背景 | 亮色前景 | 亮色背景 |
|---|---|---|---|---|
| 黑色 | 30 | 40 | 90 | 100 |
| 紅色 | 31 | 41 | 91 | 101 |
| 綠色 | 32 | 42 | 92 | 102 |
| 黃色 | 33 | 43 | 93 | 103 |
| 藍色 | 34 | 44 | 94 | 104 |
| 洋紅 | 35 | 45 | 95 | 105 |
| 青色 | 36 | 46 | 96 | 106 |
| 白色 | 37 | 47 | 97 | 107 |
這些是產生器所儲存的 16 個具名位置。這些數字並未指定紅、綠、藍的強度;它們只是要求終端機去存取某個位置,至於該位置的實際外觀則由使用者的終端機設定決定。當您在工具中搜尋 16 色代碼參考時,色彩名稱描述的是該位置,而非保證的 RGB 數值。
如何在瀏覽器中建立 ANSI 色彩序列
- 開啟 ANSI 色彩代碼產生器,並輸入您想要在終端機中格式化的文字。
- 選擇選用的前景、選用的背景,並僅在需要時加入粗體或底線;不支援的樣式與色彩編號會被拒絕,因此不會悄悄輸出非預期的數值。
- 產生序列並檢查兩種形式:逸出位元以 \x1b 撰寫的可視逸出表示,以及原始的 SGR 參數,這樣您就能在複製前確認前綴、文字內容與結尾的重置指令。
- 僅將原始序列複製到可信任且支援終端機的環境中,例如原始字串、測試資料或除錯工作流程,再貼到真正的終端機中驗證可視行為,包括結尾的重置是否確實讓下一段輸出恢復為純文字。
以亮紅色前景、藍色背景、粗體與底線為例,其具體的前綴參數串為 1;4;91;44。因此產生的串流會是 ESC[1;4;91;44m 接著文字,再以 ESC[0m 關閉該區段。可視逸出表示會將前導位元寫成四個字元 \x1b,這樣頁面本身在您檢視序列時不會改變外觀。
為何同一組代碼在不同的終端機中看起來不同
SGR 色彩編號是位置選擇器,而非上色配方。終端機模擬器、色彩主題、使用者設定檔、輔助使用選項、多工器、遠端環境以及個別應用程式,都可以將該位置重新對應至任何 RGB 三元組。90 到 107 的亮色範圍由 xterm 相容模擬器所實作,而 ECMA-48 僅標準化了 30 到 47 的基本範圍;亮色對應屬於常見延伸,並非標準的正式部分。產生器無法得知使用者實際看到的顏色,這正是為何本頁刻意不顯示假的色彩預覽,以免暗示存在一個通用的終端機調色盤。
粗體同樣具有彈性。有些終端機將參數 1 解讀為較粗的字重,有些則選擇提高色彩強度,少數較舊的終端機則利用粗體來存取亮色調色盤。底線的外觀與顏色也會因模擬器而異。請為以下情境規劃替代方案:使用者將終端機設定為忽略色彩、遵循 NO_COLOR 慣例,或將輸出重新導向到完全不會解讀這些位元組的非互動式接收端。
在記錄檔與終端機中安全地處理逸出位元
原始逸出位元是控制資料,而非可列印字元。將複製的序列貼到終端機命令列、記錄檔、問題追蹤器、聊天訊息或原始檔案中,會產生隱形的控制行為而非可讀文字。含有不受信任之控制字元的記錄檔可能隱藏文字、偽造視覺行、產生誤導性連結,或干擾下一位讀取者的終端機狀態。在將不受信任的資料列印到互動式終端機之前,請先進行淨化處理,並提供一條純文字的記錄路徑,將控制序列移除或以可視方式逸出。
產生器的可視逸出形式正是為這樣的檢視步驟所設計。當逸出位元以 \x1b 呈現時,其餘字串仍可搜尋與複製貼上,而不會意外觸發終端機行為。在文件、README 範例與程式碼註解中使用可視形式;僅在確認目的端能正確解讀 SGR 時,才使用原始形式。
瀏覽器產生器的限制與真實終端機測試
此頁面本身沒有終端機模擬器,因此無法判斷目的端是否支援 ECMA-48、xterm 延伸、Windows 虛擬終端機處理、NO_COLOR 慣例,或重新導向的非互動式輸出。所有文字、選擇、產生的位元組、搜尋詞彙與剪貼簿操作都停留在瀏覽器中;不會上傳任何資料,也不會在殼層中執行。產生器僅支援三個樣式參數:1 為粗體、3 為斜體 (僅用於邏輯相容性)、4 為底線,但目前介面僅公開粗體與底線。不支援的樣式與色彩編號會被拒絕,因此您複製的前綴永遠會是有效的 SGR 序列,即使它與目的端的預期不符。
若要可靠地使用,請產生最小必要的參數集、檢查可視表示、僅複製到可信任的環境、在每個區段結尾重置格式化,並在使用者實際執行的真實終端機主題與輸出模式中驗證行為。八個外部測試資料會鎖定基本前景與背景的配對,測試同時強制要求 16 個不重複的代碼資料列、一個亮色篩選結果,以及一組精確的多樣式原始與逸出序列,因此您從頁面複製的輸出會與參考套件所預期的完全一致。
若想深入了解 SGR 機制以及調色盤位置如何對應至色彩主題的概念,ANSI 色彩的開發者參考資料涵蓋了更詳細的底層規格說明。
延伸閱讀:如何使用 ASCII 表:查詢、搜尋與複製代碼。