Przejdź do treści

Aktualizacja: 2.11.2026

Kolory w terminalu: kody ANSI w Pythonie, JavaScript, Javie, PHP i C++

Konsola nie musi być szara. Czerwony komunikat o błędzie, zielone “OK”, żółte ostrzeżenie albo choinka z kolorowymi bombkami: to wszystko robią kody ANSI (ang. ANSI escape codes), czyli krótkie sekwencje znaków wstawiane do zwykłego napisu. Terminal ich nie wypisuje, tylko zmienia według nich kolor i styl tekstu.

Na tej stronie znajdziesz budowę sekwencji, tabelę kodów, paletę 256 kolorów i truecolor, przykłady w pięciu językach i najczęstsze błędy. Każdy przykład uruchomisz w przeglądarce, bez instalacji: konsola BitWizards pokazuje kolory ANSI w Pythonie, JavaScript, Javie, PHP i C++.

Wypróbuj pierwszy kolorowy napis w Pythonie

Jak działa kolorowy tekst w konsoli

Sekwencja zaczyna się od niewidocznego znaku ESC (kod 27, szesnastkowo 1B, ósemkowo 33). Po nim stoi nawias kwadratowy, liczby oddzielone średnikami i litera m, która oznacza “ustaw wygląd tekstu”:

ESC [ 31 m        czerwony tekst
ESC [ 1 ; 32 m    pogrubiony zielony tekst
ESC [ 0 m         reset: powrót do domyślnego wyglądu

Ustawiony wygląd trwa do resetu. Wszystko, co program wypisze po ESC[31m, będzie czerwone, także w kolejnych liniach, aż pojawi się ESC[0m. Dlatego kolorowy fragment zawsze zamyka się resetem.

Sam znak ESC w kodzie zapisuje się jako sekwencję ucieczki w napisie. Każdy język ma na to swój sposób:

Język Zapis ESC Przykład: czerwony napis
Python \033, \x1b, \u001b print("\033[31mtekst\033[0m")
JavaScript \x1b, \u001b console.log("\x1b[31mtekst\x1b[0m")
Java \u001B, \033 System.out.println("\u001B[31mtekst\u001B[0m")
PHP \e, \033 echo "\e[31mtekst\e[0m";
C++ \x1b, \033 cout << "\x1b[31mtekst\x1b[0m";

Tabela kodów ANSI: kolory tekstu i tła

Osiem podstawowych kolorów ma kody 30-37 dla tekstu i 40-47 dla tła. Jasne odmiany to 90-97 (tekst) i 100-107 (tło).

Kolor Tekst Jasny tekst Tło Jasne tło
czarny 30 90 40 100
czerwony 31 91 41 101
zielony 32 92 42 102
żółty 33 93 43 103
niebieski 34 94 44 104
purpurowy (magenta) 35 95 45 105
błękitny (cyan) 36 96 46 106
biały 37 97 47 107

Dokładny odcień zależy od terminala: każdy ma własną paletę, a “jasny czarny” (90) zwykle wygląda jak szary.

Style tekstu: pogrubienie, podkreślenie, odwrócenie

Kod Działanie
0 reset: domyślny kolor i styl
1 pogrubienie
2 przyciemnienie
3 kursywa
4 podkreślenie
7 odwrócenie: kolor tekstu i tła zamieniają się miejscami

Kody łączy się średnikiem w jednej sekwencji. ESC[1;4;33;44m daje pogrubiony, podkreślony żółty tekst na niebieskim tle.

256 kolorów i truecolor

Gdy osiem kolorów to za mało, są dwie rozszerzone formy:

  • paleta 256 kolorów: ESC[38;5;nm ustawia kolor tekstu, ESC[48;5;nm kolor tła, gdzie n to liczba 0-255. Numery 0-15 to kolory podstawowe i jasne, 16-231 to sześcian 6x6x6 (numer = 16 + 36 * r + 6 * g + b, gdzie r, g, b to 0-5), a 232-255 to odcienie szarości;
  • truecolor (24 bity): ESC[38;2;r;g;bm ustawia tekst na dowolny kolor RGB, a ESC[48;2;r;g;bm tło. Na przykład ESC[38;2;255;128;0m to pomarańczowy.

Ten program w Pythonie rysuje sześcian palety 256 kolorów jako kolorowe tło:

for number in range(16, 232):
    print(f"\033[48;5;{number}m  \033[0m", end="")
    if (number - 15) % 36 == 0:
        print()

Kolorowy tekst w Pythonie (print z kolorem)

W Pythonie nie potrzeba żadnej biblioteki. Wygodnie jest trzymać kody w stałych i doklejać je do napisu albo wstawiać w f-stringu:

RED = "\033[31m"
GREEN = "\033[32m"
BOLD = "\033[1m"
RESET = "\033[0m"

print(RED + "Błąd: brak pliku" + RESET)
print(f"{BOLD}{GREEN}Zapisano!{RESET} Dalej zwykły tekst.")

Przy większej liczbie komunikatów przydaje się mała funkcja, która sama dokleja reset:

def colored(text, code):
    return f"\033[{code}m{text}\033[0m"

print(colored("PASS", "1;32"), "test_login")
print(colored("FAIL", "1;31"), "test_logout")

Popularne biblioteki (np. colorama, rich) robią to samo pod spodem: wypisują sekwencje ANSI. Kurs z lekcjami o kolorach: Python w przeglądarce.

Kolory w konsoli JavaScript (console.log)

W Node.js i w konsoli BitWizards console.log wypisuje sekwencje ANSI tak samo jak inne języki. ESC zapisuje się jako \x1b albo \u001b. Zapis ósemkowy \033 w JavaScript jest przestarzały i w trybie ścisłym ("use strict", moduły) kończy się błędem składni.

const RED = "\x1b[31m";
const RESET = "\x1b[0m";

console.log(RED + "Błąd: brak pliku" + RESET);
console.log(`\x1b[1;32mZapisano!${RESET} Dalej zwykły tekst.`);

Więcej o kursie: JavaScript.

Kolory w konsoli Java (System.out.println)

W Javie ESC to najczęściej \u001B, działa też ósemkowe \033:

public class Main {
    static final String RED = "\u001B[31m";
    static final String RESET = "\u001B[0m";

    public static void main(String[] args) {
        System.out.println(RED + "Błąd: brak pliku" + RESET);
        System.out.println("\u001B[1;32mZapisano!" + RESET + " Dalej zwykły tekst.");
    }
}

Więcej o kursie: Java.

Kolory w konsoli PHP (echo)

PHP ma skrót \e dla znaku ESC, działa też \033. Uwaga: sekwencje ucieczki działają tylko w napisach w cudzysłowach "...". W apostrofach '\e[31m' PHP wypisze dosłownie ukośnik i literę e.

<?php
$red = "\e[31m";
$reset = "\e[0m";

echo $red . "Błąd: brak pliku" . $reset . "\n";
echo "\e[1;32mZapisano!\e[0m Dalej zwykły tekst.\n";

Kody ANSI dotyczą konsoli (PHP uruchamiany z wiersza poleceń). Na stronie WWW kolor ustawia się w HTML i CSS. Więcej o kursie: PHP.

Kolory w konsoli C++ (cout)

W C++ ESC zapisuje się szesnastkowo \x1b albo ósemkowo \033:

#include <iostream>
using namespace std;

int main() {
  cout << "\x1b[31m" << "Blad: brak pliku" << "\x1b[0m" << endl;
  cout << "\033[1;32mZapisano!\033[0m Dalej zwykly tekst." << endl;
  return 0;
}

Więcej o kursie: C++.

Częste błędy

  • Brak resetu, kolor “wycieka”. Bez ESC[0m na końcu kolor przechodzi na następne linie programu, a w prawdziwym terminalu czasem nawet na znak zachęty po zakończeniu programu. Każdy kolorowy fragment zamykaj resetem.
  • Starsza konsola Windows. Klasyczna konsola cmd.exe pokazuje sekwencje jako znaki typu ←[31m, dopóki program nie włączy przetwarzania sekwencji VT (tak robi na przykład colorama.just_fix_windows_console() w Pythonie). Windows Terminal, terminale Linuksa i macOS obsługują ANSI od razu.
  • Konsole w IDE. Jedne pokazują kolory (np. terminal w VS Code, konsola PyCharm), inne surowe znaki (np. IDLE). Gdy kolory nie działają, uruchom program w terminalu systemowym.
  • Wyjście do pliku. Po przekierowaniu wyniku do pliku (python app.py > log.txt) sekwencje trafiają do pliku jako zwykłe znaki. Programy narzędziowe często wyłączają kolory, gdy wyjście nie jest terminalem, albo gdy ustawiona jest zmienna środowiskowa NO_COLOR.
  • Apostrofy w PHP, \033 w JavaScript. Patrz sekcje wyżej: w PHP potrzebne są cudzysłowy, a w JavaScript lepiej używać \x1b.
  • Znaki sterujące poza kolorami. Czyszczenie ekranu (ESC[2J) czy ruch kursora działają w prawdziwym terminalu, ale konsola BitWizards je pomija i pokazuje tylko kolory i style.

Projekt: choinka z kolorowymi bombkami

Dobry pierwszy projekt z kolorami łączy pętle, losowanie i kody ANSI. Choinka jest zielona, a w losowych miejscach wiszą bombki w jasnych kolorach. Pień ma brązowy kolor z palety 256 kolorów. Każde uruchomienie daje inną choinkę:

import random

GREEN = "\033[32m"
TRUNK = "\033[38;5;94m"
RESET = "\033[0m"
BAUBLES = ["\033[91m", "\033[93m", "\033[94m", "\033[95m", "\033[96m"]

height = 7
for row in range(height):
    line = ""
    for _ in range(2 * row + 1):
        if random.random() < 0.2:
            line += random.choice(BAUBLES) + "o" + RESET
        else:
            line += GREEN + "*" + RESET
    print(" " * (height - row - 1) + line)
print(" " * (height - 2) + TRUNK + "###" + RESET)

Pomysł opisuje szerzej artykuł autora Tworzenie choinki w Pythonie: świąteczne programowanie. Kolorową choinkę jako przykład i zadanie znajdziesz w temacie “Kolory w konsoli” każdego kursu podstaw (lista lekcji niżej).

Kolory w konsoli BitWizards

Konsola BitWizards interpretuje kody ANSI we wszystkich językach działających w przeglądarce: Pythonie, JavaScript, Javie, PHP i C++. Obsługiwane są:

  • reset (0), pogrubienie (1), przyciemnienie (2), kursywa (3), podkreślenie (4) i odwrócenie (7);
  • kolory tekstu 30-37 i jasne 90-97, tła 40-47 i jasne 100-107;
  • paleta 256 kolorów (38;5;n, 48;5;n) i truecolor (38;2;r;g;b).

Kolor trwa do resetu i przechodzi na kolejne linie, jak w terminalu. Paleta jest dobrana do jasnego i ciemnego motywu, więc napisy pozostają czytelne w obu. Pozostałe sekwencje (czyszczenie ekranu, ruch kursora) są pomijane. Kod uruchamia się w przeglądarce, bez instalowania kompilatora czy interpretera.

Lekcje: temat “Kolory w konsoli”

Na końcu kursów podstaw jest temat “Kolory w konsoli” z czterema przykładami (pierwszy kolorowy napis, osiem kolorów i jasne odmiany, pogrubienie, podkreślenie i tło, choinka z kolorowymi bombkami) oraz zadaniami: zielony napis OK, sygnalizator świetlny, tęcza z pętli, pasek postępu, raport testów PASS i FAIL oraz kolorowa choinka. Lekcje otworzysz bez logowania:

Powiązane technologie

Python - JavaScript - Java - PHP - C++

Uruchom pierwszy kolorowy napis bez logowania

Lekcje do wypróbowania bez logowania

Podstawy JavaScript

Podstawy C++

Częste pytania

Jak wypisać kolorowy tekst w Pythonie?

Przed tekstem wstaw sekwencję ANSI z kodem koloru, a po nim kod resetu, na przykład print("\033[31mBłąd\033[0m") wypisze słowo Błąd na czerwono. Nie trzeba instalować żadnej biblioteki: kolor rysuje terminal, który rozpoznaje sekwencję.

Co oznacza \033[0m?

To reset: przywraca domyślny kolor i styl tekstu. \033 to znak ESC zapisany ósemkowo (27 dziesiętnie), [ otwiera sekwencję, 0 to kod resetu, a litera m kończy sekwencję ustawiającą wygląd tekstu.

Dlaczego zamiast kolorów widzę znaki typu ←[31m?

Konsola nie interpretuje sekwencji ANSI. Tak zachowuje się starsza konsola Windows (cmd.exe), dopóki program nie włączy trybu VT, a także niektóre konsole IDE, na przykład IDLE. Windows Terminal, terminale Linuksa i macOS oraz konsola BitWizards pokazują kolory od razu.

Czy kolory ANSI działają w Javie, PHP, JavaScript i C++?

Tak. Sekwencje ANSI to zwykłe znaki w napisie, więc działają w każdym języku, który wypisuje tekst do terminala. Różni się tylko zapis znaku ESC: w Javie \u001B, w PHP \e, w JavaScript i C++ \x1b, a w Pythonie najczęściej \033.

Ile kolorów można użyć w terminalu?

Podstawowo 8 kolorów i 8 jasnych odmian, zarówno dla tekstu, jak i tła. Większość współczesnych terminali obsługuje też paletę 256 kolorów (38;5;n) i pełny kolor RGB, czyli truecolor (38;2;r;g;b).

Zacznij już teraz

BitWizards jest darmowy. Wypróbuj demo bez logowania albo zaloguj się do aplikacji, żeby zapisywać postęp na koncie.

Zobacz, jak zacząć