Mojibake — co to jest i jak naprawić nieczytelne znaki
Dowiedz się, czym jest mojibake, dlaczego pojawiają się nieczytelne znaki i jak szybko naprawić kodowanie tekstu — praktyczne porady i narzędzia.
Mojibake (文字化け, wymawiane /modʑibake/) to określenie na niepoprawne, nieczytelne znaki wyświetlane wtedy, gdy oprogramowanie komputerowe nie interpretuje poprawnie kodowania tekstu. Tekst w komputerach jest reprezentowany jako sekwencja bajtów według określonego kodowania znaków. Przy przesyłaniu lub zapisie każdy znak jest zastępowany przez swoją pozycję (numer) w tym kodowaniu; aby odtworzyć znak, numer ten musi zostać poprawnie zinterpretowany z powrotem jako znak. Gdy oprogramowanie nie zna (lub błędnie rozpozna) oryginalnego kodowania, odczyta bajty przy użyciu innego schematu i otrzymamy ciągi dziwnych symboli — czyli mojibake. Unicode został wprowadzony, aby ograniczyć tego typu problemy; współczesne implementacje najczęściej używają UTF-8, które reprezentuje znaki za pomocą od 1 do 4 bajtów, dzięki czemu możliwe jest jednoznaczne kodowanie większości światowych pism.
Dlaczego pojawia się mojibake — najczęstsze przyczyny
- Niezgodność zadeklarowanego i rzeczywistego kodowania: plik lub strona mają wpisane jedno kodowanie (np. ISO-8859-1, Windows-1250), a odczytywane są jako inne (np. UTF-8).
- Brak nagłówka lub meta charset: przeglądarka lub odbiorca nie wie, jak interpretować bajty, więc stosuje domyślne kodowanie.
- Błąd konwersji / podwójne kodowanie: tekst został dwukrotnie przekonwertowany między kodowaniami (np. UTF-8 → ISO-8859-1 → UTF-8), co powoduje przykre efekty.
- BOM (Byte Order Mark): obecność lub brak BOM może spowodować, że niektóre programy źle odczytają początek pliku.
- Niewspierane znaki lub brak odpowiedniej czcionki: nawet przy poprawnym kodowaniu, brak glifu w czcionce może objawiać się jako kwadraty lub znaki zastępcze.
- Złe ustawienia systemu/terminala: np. niewłaściwe wartości zmiennych środowiskowych LANG/LC_* w systemach Unixowych lub nieprawidłowy kod strony w wierszu poleceń Windows.
Typowy przykład
Najczęściej spotykanym przypadkiem jest sytuacja, gdy bajty tekstu w UTF-8 zostaną zinterpretowane jako ISO-8859-1 (lub Windows-1252). W efekcie znak "é" (UTF-8: 0xC3 0xA9) może zostać wyświetlony jako "é". To klasyczny przejaw mojibake.
Jak naprawić mojibake — praktyczne kroki
Poniżej zbiór prostych metod zależnych od kontekstu (strona WWW, plik tekstowy, terminal, baza danych):
Strony internetowe
- Upewnij się, że serwer wysyła nagłówek HTTP Content-Type z poprawnym charset, np. Content-Type: text/html; charset=utf-8.
- Dodaj w dokumencie HTML meta charset: <meta charset="utf-8">.
- Zapisuj pliki źródłowe (HTML, CSS, JS) w tym samym kodowaniu, które deklarujesz (najlepiej UTF-8 bez BOM).
- Sprawdź pliki szablonów i CMS — czasem osobne moduły zapisują w innym kodowaniu.
Pliki tekstowe i edytory
- Otwórz plik w edytorze, który potrafi zmieniać i wyświetlać kodowanie (np. Notepad++, Sublime Text, VS Code).
- W edytorze sprawdź, jakim kodowaniem plik został wykryty, i spróbuj ponownie otworzyć go z innym kodowaniem (np. Windows-1250, ISO-8859-2, UTF-8).
- Jeśli plik jest w innym kodowaniu, skonwertuj go do UTF-8: w Notepad++ wybierz Encoding → Convert to UTF-8 (bez BOM).
- W systemie Unix/Linux można użyć narzędzia iconv, np.:
iconv -f WINDOWS-1250 -t UTF-8 plik_in.txt -o plik_out.txt - Do wykrywania kodowania użyj narzędzi: file -i, enca, chardet (python) lub narzędzi online.
Terminale i konsola
- Ustaw zmienne środowiskowe na wartości z UTF-8, np. export LANG=pl_PL.UTF-8 (Linux).
- W Windows zmień stronę kodową (chcp) lub używaj terminala obsługującego UTF-8 (np. Windows Terminal) i ustaw font obsługujący znaki Unicode.
Bazy danych
- Sprawdź ustawienia kodowania bazy i połączeń. W MySQL/MariaDB używaj utf8mb4 dla kolumn i połączeń (character_set_server, character_set_client, character_set_connection).
- Przy imporcie danych podaj właściwe kodowanie źródła, aby nie wprowadzić już uszkodzonych danych do bazy.
Poczta e-mail
- W nagłówkach MIME wiadomości ustaw prawidłowy Content-Type z charset (np. UTF-8) oraz Content-Transfer-Encoding.
- Upewnij się, że klient pocztowy wysyła i odczytuje wiadomości w tym samym kodowaniu.
Narzędzia pomocne przy diagnozie i naprawie
- iconv — konwersja między kodowaniami (Linux/macOS).
- enca, chardet — narzędzia do wykrywania kodowania plików.
- Notepad++, VS Code — graficzne edytory z możliwością zmiany kodowania i konwersji.
- Narzędzia online do konwersji i wykrywania kodowania (uwaga na prywatność danych).
- Narzędzia developerskie przeglądarek — sprawdź nagłówki odpowiedzi i meta charset.
Jak zapobiegać mojibake — dobre praktyki
- Stosuj UTF-8 wszędzie: pliki źródłowe, bazy danych, nagłówki HTTP, e-maile i połączenia API.
- Zawsze deklaruj charset jawnie (meta/nagłówki) i konfiguruj serwer tak, by wysyłał właściwy Content-Type.
- Unikaj mieszania różnych kodowań w tym samym projekcie.
- Testuj wyświetlanie tekstu w różnych środowiskach i na różnych systemach operacyjnych.
- Uważaj na automatyczne konwersje przez narzędzia (np. edytory tekstu lub importy), które mogą zmieniać kodowanie bez Twojej wiedzy.
Podsumowanie
Mojibake powstaje, gdy bajty tekstu są interpretowane przy użyciu niewłaściwego kodowania. Najpewniejszym sposobem uniknięcia problemów jest konsekwentne używanie Unicode (UTF-8), jawne deklarowanie charset oraz stosowanie narzędzi potrafiących wykryć i konwertować kodowania. Jeśli pojawią się nieczytelne znaki, zacznij diagnozę od sprawdzenia, jakie kodowanie ma źródło danych i jakie jest oczekiwane przez program, który je wyświetla — w większości przypadków poprawna konwersja lub właściwe ustawienie nagłówków rozwiąże problem.

Tak może wyglądać strona, jeśli użyto niewłaściwego kodowania czcionki.

Artykuł w japońskiej Wikipedii dla Mojibake używa kodowania UTF-8. Ten zrzut ekranu pokazuje, jak wygląda, gdy jest zdekodowany przy użyciu standardowego kodowania Windows CP1252.
Pochodzenie słowa
Mojibake to słowo pochodzące z języka japońskiego. Słowo 文字化け ([moʥibake]) składa się z dwóch części. 文字 (moji) oznacza literę, znak. 化け (bake), od czasownika 化ける (bakeru), oznacza pojawiać się w przebraniu, przybierać formę, zmieniać się na gorsze. Dosłownie oznacza to "mutację postaci".
Pytania i odpowiedzi
Q: Co to jest "mojibake"?
O: Mojibake to termin oznaczający nieprawidłowe i nieczytelne znaki, które pojawiają się, gdy oprogramowanie komputerowe nie wyświetla poprawnie tekstu.
P: W jaki sposób tekst jest kodowany podczas korzystania z komputerów?
O: Tekst jest kodowany przy użyciu kodowania znaków, w którym każdy znak jest zastępowany jego pozycją lub numerem w kodowaniu.
P: Co się dzieje, gdy oryginalne kodowanie nie jest określone podczas przesyłania tekstu?
O: Gdy oryginalne kodowanie nie jest określone, może zostać użyty inny znak, gdy numer zostanie zastąpiony znakiem do wyświetlenia.
P: Co to jest Unicode i jak rozwiązuje ten problem?
O: Unicode to standard kodowania znaków, który może reprezentować większość znaków w dwóch bajtach. Rozwiązuje on problem używania różnych kodowań znaków i zapewnia prawidłowe wyświetlanie znaków.
P: Jakie są przykłady innych kodowań znaków, które były używane przed Unicode?
O: ISO-8859 jest przykładem innego kodowania znaków, które było używane przed Unicode.
P: Ile różnych kodowań zawiera ISO-8859?
O: ISO-8859 zawiera 15 różnych kodowań.
P: Czy znaki specjalne w ISO-8859 są takie same dla wszystkich kodowań?
O: Nie, znaki specjalne w ISO-8859 są zapisane inaczej dla każdego kodowania.
Przeszukaj encyklopedię