Mojibake: čo spôsobuje nečitateľné znaky a ako ich opraviť
Mojibake: prečo sa zobrazujú nečitateľné znaky a ako ich opraviť — praktický návod na rozpoznanie kódovania, opravu (UTF‑8, ISO‑8859) a prevenciu chýb v texte.
Mojibake (文字化け, vyslovuje sa /modʑibake/) je názov pre nesprávne, nečitateľné alebo pomýlené znaky, ktoré sa zobrazujú, keď počítačový softvér nezobrazuje text v pôvodnom kódovaní. Počítačový text sa pri uložení alebo prenose prevádza na čísla (kódy znakov) podľa určitého kódovania. Pri spätnom zobrazení sa čísla opäť mapujú na znaky — ak však prijímač použije iné kódovanie, výsledkom sú zle zobrazené znaky (mojibake). Na vyriešenie týchto problémov bol zavedený kód Unicode. Moderné weby a dokumenty bežne používajú UTF-8, ktoré dokáže zakódovať všetky znaky Unicode pomocou 1–4 bajtov, vďaka čomu výrazne znižuje riziko mojibake pri kombinovaní jazykov a písmených sád.
Prečo vzniká mojibake
- Nesúlad kódovaní: najčastejší dôvod — text bol uložený v jednom kódovaní (napr. Windows‑1250 alebo UTF‑8), ale číta sa v inom (napr. ISO‑8859‑1). Pri nesprávnej interpretácii bytových sekvencií vzniknú zbytočné znaky alebo kombinácie ako „é“ namiesto „é“.
- HTTP alebo HTML hlavičky chýbajú alebo sú nesprávne: ak webový server neposiela správny Content‑Type/chset alebo dokument neobsahuje
<meta charset="...">, prehliadač môže zvoliť nesprávne kódovanie. - BOM (Byte Order Mark): niektoré editory pridávajú BOM do začiatku UTF‑8 súboru; to môže spôsobiť problémy v prostrediach, ktoré s BOM nepočítajú (napr. pri PHP hlavičkách).
- Nesprávne nastavenia databázy alebo spojenia: ak údaje uložíte v jednom kódovaní a pri dotaze sa používa iné (napr. uložené vo Windows‑1250, pripojenie číta ako UTF‑8), vložený alebo načítaný text sa poškodí.
- Chýbajúce alebo nevhodné fonty: niekedy „znak“ neexistuje vo font‑sade a systém zobrazí prázdny obdĺžnik (tzv. tofu) alebo nahradí ho podobným znakom, čo môže pôsobiť ako nečitateľné.
- Chyby pri preklade medzi kódovaniami: opakované nesprávne prekonvertovanie súborov (napr. z UTF‑8 do Latin1 a späť) môže text trvalo poškodiť.
Typický príklad (prepojenie medzi bytom a znakom)
Ak máte písmeno „é“ (Unicode U+00E9), v UTF‑8 sa kóduje ako dve byty: C3 A9. Ak tieto dva byty prečíta interpretácia ISO‑8859‑1 ako dva samostatné znaky, zobrazia sa ako „é“. Tak vzniká bežné mojibake.
Ako diagnostikovať problém
- Skontrolujte HTTP hlavičky (v prehliadači: DevTools → Network → predmetný súbor → Response Headers) – hľadajte
Content-Typeacharset. - Skontrolujte HTML dokument: obsahuje
<meta charset="utf-8">alebo inú deklaráciu? - Zistite, v akom kódovaní je súbor uložený (editory ako Notepad++, VS Code, alebo príkazy
file -i,enca,chardetna Linuxe). - Ak ide o databázu, skontrolujte kódovanie stĺpcov/tabuliek a kódovanie spojenia (napr. MySQL:
SHOW VARIABLES LIKE 'character_set_%';). - Vyskúšajte dočasne prepísať iné kódovanie v prehliadači (View → Encoding) — ak sa text opraví, viete, ktoré kódovanie je pôvodné.
Praktické opravy
- Webové stránky: vždy posielajte správnu HTTP hlavičku a deklarujte charset v HTML. Odporúčanie: používať
utf-8všade:- HTTP:
Content-Type: text/html; charset=utf-8 - HTML:
<meta charset="utf-8">
- HTTP:
- Súbory a editory: v textovom editore (Notepad++, VS Code, Sublime) prepíšte alebo uložte súbor ako UTF‑8 (najlepšie bez BOM pre web a skripty). Pozor: ak súbor už zobrazuje mojibake, pred uložením zistite pôvodné kódovanie a správne ho skonvertujte.
- Konverzia súborov: použite nástroje ako
iconvaleborecode:- Príklad:
iconv -f WINDOWS-1250 -t UTF-8 input.txt -o output.txt - Ak UTF‑8 bol interpretovaný ako ISO‑8859‑1, opraviť to môžete napr.
iconv -f ISO-8859-1 -t UTF-8(alebo nástrojrecode).
- Príklad:
- Databázy: použite Unicode kódovanie tabuliek (napr.
utf8mb4v MySQL) a pri pripojení nastavte charset (napr. mysqli_set_charset alebo PDO DSNcharset=utf8mb4alebo SQLSET NAMES 'utf8mb4'). - SMTP / e‑maily: zabezpečte MIME hlavičky s
Content-Type: text/plain; charset="utf-8"a správne kódovanie (base64 alebo quoted‑printable) podľa potreby. - Fonty: ak chýbajú niektoré písma, nainštalujte alebo použite font, ktorý obsahuje požadované znaky (napr. Noto fonts od Google pokrývajú veľké množstvo písmených sád).
Oprava poškodeného textu — postup
- Zálohujte pôvodný súbor (niekedy sa dá poškodenie ešte zhoršiť ďalšími konverziami).
- Zistite pravdepodobné pôvodné kódovanie (napr. pre Central European: Windows‑1250 alebo ISO‑8859‑2; pre západnú Európu: Windows‑1252 alebo ISO‑8859‑1).
- Vyskúšajte konverziu späť do UTF‑8 pomocou
iconva otvorte výsledok v editore s UTF‑8. - Ak nepoznáte pôvodné kódovanie, pomôžu nástroje na detekciu (
enca,chardet) alebo manuálne skúšanie typických kódovaní.
Najlepšie praktiky (pre vývojárov a správcov obsahu)
- Používajte UTF‑8 všade: súbory, databázy, HTTP hlavičky, e‑maily.
- Nastavte editor a systém tak, aby implicitne ukladali v UTF‑8 (bez BOM pre webové skripty).
- Testujte importy a exporty dát medzi systémami (napr. CSV import) – vždy si overte nastavené kódovanie.
- Používajte Unicode‑aware knižnice a funkcie namiesto starších „byte‑oriented“ funkcií.
- Pri migrácii starších dát starostlivo plánujte konverziu a overujte výsledky na malom vzorku pred hromadným prepisom.
Mojibake je zvyčajne symptóm nesúladu medzi dvoma systémami, ktoré nehovoria rovnakým „jazykom“ kódovania. Keď pochopíte, v akom kódovaní sú dáta uložené a aké kódovanie očakáva klient, môžete text zvyčajne obnoviť alebo zabrániť ďalšiemu vzniku takýchto chýb použitím Unicode (UTF‑8) a správnych deklarácií kódovania.

Takto môže vyzerať webová stránka, ak sa použije nesprávne kódovanie písma.

Japonský článok na Wikipédii pre Mojibake používa kódovanie UTF-8. Tento obrázok ukazuje, ako vyzerá, keď je dekódovaný pomocou štandardného kódovania systému Windows CP1252.
Pôvod slova
Mojibake je japonské slovo. Slovo 文字化け ([moʥibake]) sa skladá z dvoch častí. 文字 (moji) znamená písmeno, znak. 化け (bake), od slovesa 化ける (bakeru), znamená objaviť sa v prestrojení, vziať na seba podobu, zmeniť sa k horšiemu. V doslovnom preklade to znamená "charakterová mutácia".
Otázky a odpovede
Otázka: Čo je to "mojibake"?
Odpoveď: Mojibake je výraz pre nesprávne a nečitateľné znaky, ktoré sa objavia, keď počítačový softvér nedokáže správne zobraziť text.
Otázka: Ako sa kóduje text pri používaní počítačov?
Odpoveď: Text je kódovaný pomocou kódovania znakov, kde je každý znak nahradený svojou pozíciou alebo číslom v kódovaní.
Otázka: Čo sa stane, keď pri prenose textu nie je zadané pôvodné kódovanie?
Odpoveď: Keď nie je špecifikované pôvodné kódovanie, môže sa použiť iný znak, keď sa číslo nahradí znakom na zobrazenie.
Otázka: Čo je Unicode a ako rieši tento problém?
Odpoveď: Unicode je štandard kódovania znakov, ktorý dokáže reprezentovať väčšinu znakov v dvoch bajtoch. Rieši problém používania rôznych kódovaní znakov a zabezpečuje správne zobrazenie znakov.
Otázka: Aké sú príklady iných kódovaní znakov, ktoré sa používali pred Unicode?
Odpoveď: ISO-8859 je príkladom iného kódovania znakov, ktoré sa používalo pred Unicode.
Otázka: Koľko rôznych kódovaní obsahuje ISO-8859?
Odpoveď: ISO-8859 obsahuje 15 rôznych kódovaní.
Otázka: Sú špeciálne znaky v ISO-8859 rovnaké pre všetky jeho kódovania?
Odpoveď: Nie, špeciálne znaky v ISO-8859 sú pre každé kódovanie podané inak.
Prehľadať