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.

Autor: Leandro Alegsa

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-Type a charset.
  • 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, chardet na 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-8 všade:
    • HTTP: Content-Type: text/html; charset=utf-8
    • HTML: <meta charset="utf-8">
  • 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 iconv alebo recode:
    • 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ástroj recode).
  • Databázy: použite Unicode kódovanie tabuliek (napr. utf8mb4 v MySQL) a pri pripojení nastavte charset (napr. mysqli_set_charset alebo PDO DSN charset=utf8mb4 alebo SQL SET 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 iconv a 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.Zoom
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.Zoom
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ť
AlegsaOnline.com - 2020 / 2025 - License CC3