Co to jest mojibake, czyli krzaki?

Mojibake, po polsku po prostu krzaki, to tekst, w którym polskie litery zamieniają się w dziwne znaczki: Ĺ‚ zamiast ł, Ä… zamiast ą albo ¿ zamiast ż. Powstają, gdy tekst zapisano w jednym kodowaniu, a odczytano w innym – i prawie zawsze da się je w pełni naprawić. Wklej poniżej zepsuty tekst i sprawdź.

Działa z tekstem i plikami:

  • CSV
  • TXT
  • JSON
  • XML
  • SRT
  • VTT
  • TSV
  • MD
  • HTML
  • SQL
  • LOG

Na przykład eksporty z Excela, zrzuty baz danych, napisy do filmów lub kod stron.

Napraw

  1. Przeciągnij plik lub wklej tekst
  2. Naprawa następuje automatycznie
  3. Skopiuj lub pobierz
albo po prostu przeciągnij plik tutaj
  • Bez wysyłania. Pliki są naprawiane w twojej przeglądarce i nigdy nie opuszczają urządzenia.

  • Serwery w UE. Mojibuster działa na serwerze w kraju Finlandia (UE), dlatego obowiązuje ogólne rozporządzenie o ochronie danych (RODO). Tekst RODO (EUR-Lex)

Skąd ta nazwa?

Mojibake (文字化け) to słowo japońskie: „moji” znaczy „znak”, a „bake” – „przemiana”. W latach 90. japońskie komputery używały równolegle kilku kodowań – Shift_JIS, EUC-JP i ISO-2022-JP – więc zepsute e-maile i strony były na porządku dziennym. Słowo przeszło do angielskiego i stało się międzynarodowym terminem. Po polsku mówimy „krzaki” albo „krzaczki”.

Jak powstają krzaki?

Komputer przechowuje tekst jako bajty. Kodowanie określa, który bajt oznacza który znak. W UTF-8 litera ł zajmuje dwa bajty: C5 82. Program, który czyta je jako Windows-1250, pokazuje osobny znak dla każdego bajtu: Ĺ dla C5 i ‚ dla 82.

Na tym etapie nic nie ginie – bajty wciąż są na miejscu, tylko zostały źle odczytane. Dlatego krzaki zwykle da się odwrócić: Mojibuster zamienia błędne znaki z powrotem na bajty i odczytuje je we właściwym kodowaniu.

Tekst w UTF-8 odczytany jako Windows-1250

Krzaki

Zażółć gęślą jaźń – spotkanie w środę o 15:00

Po naprawie

Zażółć gęślą jaźń – spotkanie w środę o 15:00

Dwa rodzaje polskich krzaków

  • Ĺ‚, Ä…, Ĺ› zamiast ł, ą, ś – UTF-8 odczytany jako Windows-1250. Typowe dla plików CSV otwieranych w Excelu: krzaki w Excelu.
  • ³, ¿, œ zamiast ł, ż, ś – stary plik w Windows-1250 lub ISO-8859-2 otwarty z zachodnimi ustawieniami: Windows-1250 na UTF-8.
  • W napisach do filmów zdarzają się oba warianty: krzaki w napisach.

Mojibake w innych językach

  • Japoński: 縺薙s縺ォ縺。縺ッ zamiast こんにちは – UTF-8 odczytany jako Shift_JIS. Więcej na stronie japońskiej.
  • Rosyjski: Привет zamiast Привет – UTF-8 odczytany jako Windows-1251. Rosjanie mówią na to „krakoziabry”.
  • Języki zachodnie: é, ñ lub € zamiast é, ñ lub € – najczęstsza postać na świecie.

Typowe przyczyny

  • Excel otwiera plik CSV w UTF-8 bez BOM w kodowaniu Windows-1250.
  • Połączenie z bazą danych używa latin1 lub latin2, a dane są w UTF-8.
  • Strona internetowa lub e-mail podaje błędny charset.
  • Stare pliki z systemów księgowych lub urzędowych są zapisane w Windows-1250 albo ISO-8859-2.
  • Zepsuty już tekst zostaje przekonwertowany jeszcze raz – powstają podwójne krzaki.

Czy krzaki zawsze da się naprawić?

Prawie zawsze, dopóki bajty są nienaruszone. Naprawa jest niemożliwa, gdy program zastąpił litery znakiem ? albo znakiem zastępczym � – oryginalna informacja przepadła. Mojibuster naprawia wszystko, co się da, i podaje, ile miejsc zostało utraconych.

Jak zapobiegać krzakom?

  • Zapisuj pliki w UTF-8, a pliki CSV dla Excela jako CSV UTF-8 (rozdzielany przecinkami).
  • Deklaruj kodowanie: <meta charset="utf-8"> w HTML, utf8mb4 w MySQL i MariaDB.
  • Konwertuj tekst tylko raz, na granicy między dwoma systemami.
  • Przy imporcie wybieraj kodowanie samodzielnie, zamiast zdawać się na zgadywanie programu.

Najczęstsze pytania

Jak się wymawia mojibake?

Mniej więcej „mo-dżi-ba-ke”, wszystkie cztery sylaby wyraźnie. To słowo japońskie, więc nie ma mocnego akcentu.

Czy mój plik jest uszkodzony albo zawirusowany?

Nie. Krzaki to problem z wyświetlaniem, a nie wirus, i zwykle nie oznaczają utraty danych. Plik został po prostu odczytany w złym kodowaniu.

Czym krzaki różnią się od znaku �?

Krzaki typu Ĺ‚ wciąż zawierają oryginalne bajty i dają się naprawić. Znak � oznacza, że program nie mógł odczytać bajtu i go zastąpił – ta litera przepadła.

Czy mój tekst jest wysyłany na serwer?

Nie. Mojibuster naprawia tekst w Twojej przeglądarce. Nie jest on nigdzie przesyłany ani zapisywany.

Więcej poradników