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.
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
latin1lublatin2, 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,utf8mb4w 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.