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.


