ANSI 色彩代碼是一種 Select Graphic Rendition (SGR) 參數,例如 31 表示紅色前景、44 表示藍色背景,或 1 表示粗體,前綴為跳脫位元組 ESC、一個左中括號、以分號分隔的十進位數字,以及字母 m — 舉例來說,ESC[1;4;91;44m 會開啟粗體與底線,並以亮紅色文字顯示在藍色背景上。產生這些序列的正確做法取決於你實際的需求:用於記憶代碼的靜態參考資料、用於正式程式的執行階段程式庫,或是能產生原始控制位元組以便貼到支援終端機的內容中的產生器。像是 ANSI Color Codes Generator 這類的瀏覽器產生器就屬於第三類 — 它會組裝出精確的 CSI m 前綴、文字內容,以及結尾的 ESC[0m 重置指令,讓你無需上傳到伺服器、無需安裝套件,也無須聲稱支援通用的 RGB 色盤,就能複製原始位元組。

產生 ANSI 色彩代碼的常見做法
開發者在需要為終端機輸出加上色彩時,通常會採用三種模式之一。每種模式都有不同的形態,而選擇很重要,因為你所產生的序列是一串控制位元組,而不是樣式物件。
- 手寫查表。 你會記憶或保留一份 SGR 數字的速查表,並在原始碼中直接撰寫像 "\x1b[31merror\x1b[0m" 這樣的序列。當代碼固定、色盤很小,且你能掌控輸出端時,這種方式最快。
- 語言或框架程式庫。 像 colorama、chalk、rich、termcolor 或特定平台的包裝函式這類程式庫,將跳脫位元組抽象化在函式呼叫之後。它們會處理跨平台的怪異行為,例如 Windows 虛擬終端機處理,並經常提供 256 色與真色彩的輔助工具。
- 瀏器型序列產生器。 像 ANSI Color Codes Generator 這樣的靜態頁面,接受文字以及可選的前景、背景、粗體與底線設定,輸出精確的 CSI m 前綴與 ESC[0m 重置指令,並複製原始控制位元組。由於不會上傳任何資料,它也能同時作為測試的固定資料產生器與教學輔助工具。
瀏覽器型 SGR 產生器適用的情境
當你需要親眼看到精確的控制位元組、想避免引入相依套件,或想在沒有執行階段介入的情況下講解這個格式時,產生器就能發揮價值。當你正在撰寫測試、除錯日誌檔,或是建立另一個工具會讀取的固定資料字串時,它也很有用。其取捨在於範圍:這個產生器支援標準的 8 色加上亮色 8 色的 SGR 色盤,以及三種文字樣式(粗體、邏輯上的斜體、底線,目前介面僅提供粗體與底線)。它會拒絕不支援的數字,並避免使用真色彩或 256 色參數,因為它並未聲稱擁有通用的色彩對照表。
如果你的專案確實需要每通道的 RGB 或 256 種索引色,那麼針對特定終端機語法的程式庫會是更合適的選擇。如果你的目標是取得一個可直接複製貼上的序列,以便貼入原始碼字串、支援終端機的工具或固定資料中,那麼產生器是更簡便的途徑。它也能讓工作流程保持誠實:可見的頁面並不會假裝渲染出色彩,因為沒有任何預覽能夠忠實呈現使用者可能使用的每一種主題、多工器或遠端 shell。
在 ANSI Color Codes Generator 中建立並複製序列
- 開啟 ANSI Color Codes Generator,輸入你想要渲染的終端機文字。
- 從標準或亮色色盤中選擇可選的前景與可選的背景,並視需要切換粗體或底線。
- 產生序列並並排檢視兩個輸出:可見的跳脫表示形式(其中跳脫位元組顯示為 \x1b,以免瀏覽器頁面本身被重新上色),以及像 1;4;91;44 這樣的原始 SGR 參數清單。
- 使用複製按鈕將原始控制位元組字串放入剪貼簿。剪貼簿中包含真正的 ESC 位元組、SGR 參數、你的文字,以及結尾的重置指令 — 而非那四個可見字元 backslash-x-1-b。
- 僅貼到受信任且支援終端機的內容中 — 例如原始碼字串、固定資料、除錯工具,或能識別跳脫字元的 shell — 並確認重置指令能恢復預設的呈現格式。關於參數格式本身,ANSI escape codes SGR parameter format guide 更深入地介紹了相同的語法。
標準 16 色 SGR 代碼參考
基本的前景代碼從 30 到 37,背景代碼從 40 到 47,依序為黑、紅、綠、黃、藍、洋紅、青、白。ECMA-48 定義了 SGR 控制碼,而 xterm 風格的終端機則以亮色前景 90 到 97 與亮色背景 100 到 107 加以延伸。下表列出每個色盤位置,同時標示其基本與亮色的 SGR 編號,讓產生的序列能夠一目了然。
| Color slot | Foreground (base) | Background (base) | Foreground (bright) | Background (bright) |
|---|---|---|---|---|
| Black | 30 | 40 | 90 | 100 |
| Red | 31 | 41 | 91 | 101 |
| Green | 32 | 42 | 92 | 102 |
| Yellow | 33 | 43 | 93 | 103 |
| Blue | 34 | 44 | 94 | 104 |
| Magenta | 35 | 45 | 95 | 105 |
| Cyan | 36 | 46 | 96 | 106 |
| White | 37 | 47 | 97 | 107 |
上述 SGR 參數編號遵循 ECMA-48 標準中 Select Graphic Rendition 的規定,而亮色延伸則記錄於 xterm control sequences reference。色彩名稱標示的是色盤位置,而不是固定的 RGB 數值;終端機主題、使用者設定檔、輔助設定、多工器與遠端環境都能各自獨立地重新對應每個位置。粗體可能被對應成加強亮度,而不是較粗的字型,某些較舊的終端機會以粗體來達到亮色色盤。請把這些代碼視為識別符,而不是色彩本身,並在依賴特定視覺結果之前,先在實際的目標環境中測試。
產生序列後進行驗證與重置
產生器所建立的前綴後面都會接著 ESC[0m,它會重設圖形呈現方式,讓後續的終端機輸出不會繼承先前的格式。這個重置指令是一道防護網,而不是保證:目標環境仍可能以不同方式解讀這串資料,或在非互動時略過這些位元組。請產生最小必要的參數組合,檢視可見的表示形式,僅複製到受信任的內容中,並在使用者實際使用的終端機主題與輸出模式下驗證行為。瀏覽器刻意避免顯示虛假的色彩預,以免暗示存在一個通用色盤,因為在各家模擬器之間根本沒有這樣的色盤。這個頁面本身沒有內建終端機模擬器,因此無法判斷目標環境是否支援 ECMA-48、xterm 延伸功能、Windows 虛擬終端機處理、NO_COLOR 慣例,或是重新導向的非互動輸出。
產生序列後保持終端機輸出的安全性
原始的跳脫位元組是控制資料,而不是顯示文字。將它們貼到終端機命令列、日誌檔、議題追蹤器、聊天視窗或原始碼檔案中,可能會產生不可見的行為,而不是可讀的字元。日誌中未受信任的控制字元可能會藏文字、偽造視覺上的行、產生誤導性的連結,或擾亂終端機狀態,因此請在將未受信任的資料列印到互動式終端機之前先進行淨化,並提供一條純文字的日誌路徑,以便移除控制序列或將其明顯地跳脫顯示。safe handling guide for SGR sequences in logs 詳細說明了具體的防護模式與正式環境中需要注意的失敗情況。
其他值得留意的防護原則:在設定了 NO_COLOR 慣例時予以遵循;在重新導向與非互動的輸出中進行測試,因為在這些情境下,跳脫位元組往往會顯示為亂碼而非樣式;並提供停用色彩的方式,讓螢幕讀器與輔助設定檔不會被迫解讀串流位元組。所有文字、選擇、產生的位元組、搜尋詞彙與剪貼簿操作都只留在瀏覽器中;不會上傳,也不會在 shell 中執行,這使得這個產生器在處理敏感的固定資料時是安全的 — 只要最終的目的環境本身是受信任的。