ANSI 顏色代碼是變更前景或背景調色板的 SGR 參數,而粗體與底線則是獨立的 SGR 樣式參數。ANSI 逸出代碼涵蓋更廣範的終端機操作,而 SGR 屬於 Select Graphic Rendition 系列,顏色參數只是其中的一部分。如果需求是移動游標、清除某個區域,或控制其他不涉及算繪的行為,加入顏色參數並無法解決該問題。如果需求是紅色狀態標籤、彩色背景、粗體強調或底線,則相關的 SGR 參數是解決方案的一部分。因此,這項決策分成兩個部分:先確認實際需要的視覺變更,再確認目的地可解譯 SGR 並支援顏色。ANSI 顏色代碼產生器可協助完成第一部分,方法是根據終端機文字以及選用的前景、背景、粗體與底線設定來建立序列。它也提供可搜尋的參考資料,涵蓋標準八色加上亮色八色的調色板位置。它不會檢查你的目的地,也不保證每個終端機都會顯示相同顏色,因此第二部分仍須測試實際的應用程式、終端機主題與輸出模式。

將顏色代碼與其他 ANSI 控制項區分開
ANSI 逸出序列是一項控制指令,並非每項指令都會變更顏色或文字樣式。SGR 控制圖形呈現,前景顏色、背景顏色、粗體與底線皆由特定參數表示。移動游標或清除顯示內容的序列處理的是另一項工作,因此為其加入顏色參數,充其量只是冗餘,最糟的情況還可能造成誤導。
在 SGR 序列中,顏色代碼也是選用的。粗體與底線同樣使用 SGR 參數,因此序列可以在未選取任何前景或背景顏色的情況下強調文字。反過來說,選擇前景或背景是變更調色板位置,而非保證取得特定的 RGB 值。產生器著重於這項範圍較窄的格式設定決策,而不會建立無關的終端機控制項。
每個產生的序列都使用一個 CSI m 前置碼,將提供的文字置於其後,並附加 ESC[0m 以重設圖形呈現。該重設是一道防護措施,可降低後續終端機輸出沿用格式設定的機率;但這並不能證明每個終端機或應用程式都會以相同方式解譯該串流。
將預期結果轉換為具體選擇
開啟產生器之前,請先用一般語言描述所需的結果。最小且有效的選擇通常可直接從該描述得出。
| 情境 | 相關選擇 | 應選取項目 | 重要注意事項 |
|---|---|---|---|
| 狀態標籤需要紅色前景 | 前景顏色 | 選擇前景,除非另有需要,否則省略背景 | 調色板位置的實際外觀由終端機主題決定 |
| 面板需要對比色 | 前景與背景 | 選擇兩種顏色 | 主題與使用者設定可以重新對應兩個位置 |
| 警告需要更強的強調 | 粗體 | 選擇粗體,不要無謂地加入顏色 | 粗體可能提高亮度,而非選取較粗的字型 |
| 標籤需要底線 | 底線 | 單獨選擇底線,或搭配其他必要的樣式 | 底線的形狀與顏色可能因終端機而異 |
| 輸出必須移動游標或清除某個區域 | 不使用顏色代碼 | 使用適當的非顏色終端機控制項 | 此產生器會建立 SGR 呈現序列,而非一般終端機控制序列 |
| 輸出是供人閱讀的日誌 | 通常不使用原始樣式 | 移除控制序列,或讓它們以可見的逸出形式顯示 | 原始控制資料可能扭曲日誌或終端機狀態 |
| 使用者或應用程式已停用顏色 | 不使用前景或背景顏色 | 遵循目的地的偏好設定 | 產生器無法偵測這項設定 |
此工具可以建立支援的 SGR 組合,以表達已明確說明的視覺需求。它無法決定是否應將該組合傳送至目的地。第二項決策取決於應用程式、終端機、使用者偏好與輸出通道。
產生並測試合適的顏色序列
- 輸入確切的終端機文字。 這段文字會置於開頭的 SGR 序列與重設之間。請將其保持簡短,足以辨識輸出中預期的部分。
- 只選擇必要的前景、背景、粗體與底線設定。 當輸出只需強調或完全不需要樣式時,請將前景與背景維持未設定。目前的介面提供粗體與底線;不支援的樣式與顏色編號會遭到拒絕,而不會在未告知的情況下被接受。
- 產生序列並檢查兩種輸出。 檢視可見的逸出表示與 SGR 參數。可見表示會將逸出位元組寫成 \x1b,讓你能在不變更瀏覽器頁面外觀的情況下檢查控制結構。此頁面刻意避免使用可能暗示通用終端機調色板的虛假顏色預覽。
- 只將原始序列複製到值得信任且支援終端機的環境中。 複製按鈕會將實際的 ESC 控制位元組、SGR 參數、文字與重設放進剪貼簿,而不是拼出 \x1b 的四個可見字元。請在適合的來源字串、支援終端機的工具、測試資料或除錯工作流程中使用,而不要隨意貼到任何地方。
- 在實際應用程式中測試序列及其重設。 確認只有預期的文字取得格式設定、後續輸出恢復正常,且結果在相關終端機主題與輸出模式中運作正確。如果應用程式支援樣式化輸出,請提供讓使用者停用顏色的方式。
讓調色板選擇與 SGR 參數相符
ECMA-48 第五版定義了 SGR 與基本呈現控制項,而xterm 控制序列文件則用來交叉檢查廣泛實作的亮色對應。產生器在可搜尋的 16 色參考資料中,明確列出每個前景與背景代碼。
| 調色板位置 | 基本前景 | 亮色前景 | 基本背景 | 亮色背景 |
|---|---|---|---|---|
| 黑色 | 30 | 90 | 40 | 100 |
| 紅色 | 31 | 91 | 41 | 101 |
| 綠色 | 32 | 92 | 42 | 102 |
| 黃色 | 33 | 93 | 43 | 103 |
| 藍色 | 34 | 94 | 44 | 104 |
| 洋紅色 | 35 | 95 | 45 | 105 |
| 青色 | 36 | 96 | 46 | 106 |
| 白色 | 37 | 97 | 47 | 107 |
這些名稱描述的是調色板位置,而非保證的 RGB 值。終端機模擬器、主題、使用者設定檔、無障礙設定、多工終端機、遠端環境與應用程式都可能重新對應它們。粗體可能選擇提高亮度,而非選取較粗的字型;部分較舊的終端機則使用粗體來存取亮色調色板。底線的形狀與顏色也會因使用端而異。
例如,藍色背景上的亮紅色標籤若同時使用粗體與底線,會使用 SGR 參數 1;4;91;44。其可見的逸出形式為 \x1b[1;4;91;44mLabel\x1b[0m:前置碼選取兩種樣式與顏色,標籤緊接在後,而重設則結束格式化範圍。
測試目的地,而不只是產生器
產生器不含終端機模擬器,因此無法判斷目的地是否支援 ECMA-48、xterm 亮色延伸功能、Windows 虛擬終端機處理、NO_COLOR 慣例,或重新導向的非互動式輸出。在某個互動式終端機中正確顯示的序列,在輸出被重新導向、篩選,或由不會傳遞控制序列的應用程式處理時,仍可能以純文字顯示。
請在每個與你的使用者相關的模式中測試實際的應用程式。檢查一般終端機主題、任何替代的高對比或無障礙設定,以及非互動式輸出路徑。此外,也要驗證重設能防止後續輸出沿用格式設定,並確認應用程式能依要求停用顏色。這些檢查可回答決策的後半部分:不僅是序列在語法上是否適合,還包括樣式化輸出是否適合該目的地。
讓原始序列遠離不可信賴的日誌
原始逸出位元組是控制資料,而非一般可列印字元。將其貼入終端機命令列、日誌、議題、聊天或來源檔案,可能產生不可見的行為,而非可讀的字元。不可信賴的控制字元可能隱藏文字、偽造視覺行、建立誤導性連結,或破壞終端機狀態。在將不可信賴資料印到互動式終端機前,請先加以清理,並提供純文字日誌路徑,讓控制序列被移除或以可見的逸出形式顯示。如需進一步了解這些風險,請參閱在日誌中安全處理 ANSI 逸出序列。
產生器的文字、選擇項目、產生的位元組、搜尋字詞與剪貼簿作業都保留在瀏覽器中。沒有任何內容會被上傳或在 shell 中執行,但這仍不代表將逸出序列插入不可信賴的輸出串流是安全的。安全性仍取決於複製的序列會送往何處,以及接收系統如何處理控制字元。
使用可重複的顏色代碼決策
在將 ANSI 顏色代碼加入逸出序列之前,套用以下檢查清單:
- 以淺顯易懂的語言說明所需的視覺結果。
- 將文字呈現需求與游標、螢幕或其他終端機控制需求分開處理。
- 確認目的地支援 SGR,且顏色功能未被停用。
- 除非前景色、背景色、粗體及底線設定有助於達成所述結果,否則所有選用設定均保持未設定。
- 複製之前,檢查可見的逸出表示法與 SGR 參數。
- 僅將原始序列複製到值得信任且支援終端機的環境中。
- 在實際應用程式中驗證格式、重設效果及後續輸出。
- 清理不受信任的終端機內容,並保留純文字記錄選項。
若這些檢查皆通過,即可產生最小且適當的 SGR 序列。若目的地不需要、不支援、不允許或不安全使用該顏色,則應省略顏色參數,但不得移除任何獨立需要的粗體或底線樣式。
若你正在權衡各種選項,Code Snippet Image Maker: PNG Rendering Explained 有詳細說明。