Mojibake (文字化け, izrunā /modʑibake/) ir termins, kas apraksta nepareizi vai nelasāmi attēlotas rakstzīmes — bieži redzamas kā nejauši simboli, jautājuma zīmes, kvadrāti vai latīņu burti ar dīvainiem prefiksiem. Tas notiek, ja datora programmatūra vai sistēma nespēj pareizi atšifrēt teksta baitu secību, jo izmantots cits rakstzīmju kodējums nekā tas, kādu programma sagaida.
Digitālajā tekstā katra rakstzīme tiek pārvērsta noteiktā baitu secībā pēc konkrēta rakstzīmju kodējuma (charset) — piemēram, ISO‑8859‑1, Windows‑1252, Shift_JIS, GB2312 u.c. Ja teksta baiti, kas pieder vienam kodējumam, tiek interpretēti kā cits kodējums, ekrānā parādās nepareizi simboli. Piemēram, vārds “é” kodēts UTF‑8 (baitu secība c3 a9) un, ja šo secību pārlasa kā ISO‑8859‑1, ekrānā parādīsies “é”.
Unicode tika izstrādāts, lai vienkāršotu dažādu rakstzīmju attēlošanu vienotā telpā — tas piešķir katrai rakstzīmei unikālu kodpunkta numuru. UTF‑8, UTF‑16 un UTF‑32 ir veidi, kā šos Unicode kodpunktus saglabāt baitu secībā (enkodēt). UTF‑8 ir visizplatītākā enkodēšana tīmeklī; tā kodē populārākās rakstzīmes ar 1–3 baitu, bet sarežģītākus simbolus — līdz 4 baitiem, nevis «2 baitos» kā reiz teikts nepareizi.
Parastie iemesli mojibake rašanās
- Trūkst vai nepareiza informācija par kodējumu: pārlūkprogramma, serveris vai datubāze neatsūta/nesatur pareizu Content-Type ar charset, vai HTML lapā nav .
- Sistēmu vai lietojumprogrammu pievienojumu nekonsistence: fails saglabāts vienā kodējumā, bet atvērts citā (piemēram, saglabāts kā Windows‑1252, bet atvērts kā UTF‑8).
- Dubultā enkodēšana: teksts jau bija UTF‑8, bet to nejauši pārrakstīja vai pārkodēja, radot divkāršu enkodēšanu.
- Nesaderīgs fonts vai trūkstošas glifi: pareizs kodējums, bet fonts nesatur nepieciešamo rakstzīmi — tad redzami tukši kvadrāti vai aizstājējzīmes.
- BOM (Byte Order Mark) problēmas: UTF‑8 BOM (baiti EF BB BF) dažkārt tiek nepareizi interpretēts un rada liekus simbolus lapas sākumā.
Bieži redzami piemēri
- "é" vai "ä" — parasti UTF‑8 baiti izlasīti kā ISO‑8859‑1 vai Windows‑1252.
- "Пох" — tipisks piemērs, kad kirilicas teksta UTF‑8 baiti lasīti kā Windows‑1251 vai Windows‑1252, radot virkni latīņu simbolu.
- Tukši kvadrāti vai jautājuma zīmes — bieži fonts nesatur simbolu.
Kā diagnosticēt
- Pārbaudiet HTML lapas vai HTTP atbildes galveni: jābūt pareizam Content-Type ar charset=utf-8 (vai attiecīgo kodējumu).
- Atveriet failu teksta redaktorā, kas ļauj izvēlēties atvēršanas kodējumu, un izmēģiniet dažādus kodējumus (UTF‑8, Windows‑1252, ISO‑8859‑1, Shift_JIS u.c.).
- Skatiet faila baitus heksadecimālā veidā (hexdump), lai saprastu, kādi baiti faktiski ir saglabāti.
- Izmantojiet rīkus kā iconv, enca, uchardet vai tiešsaistes dekoderus, lai noteiktu un pārvērstu kodējumu.
Kā novērst mojibake
- Standartizējiet uz Unicode (visbiežāk UTF‑8) visos slāņos: faili, HTTP galvenes, datubāzes savienojumi, e‑pasta galvenes utt.
- Pārliecinieties, ka HTML/HTTP norāda pareizu kodējumu: <meta charset="utf-8"> vai HTTP galvenē Content-Type: text/html; charset=utf-8.
- Ja strādājat ar PHP, Python, Java u.c., iestatiet atbilstošu noklusējuma kodējumu un pārliecinieties, ka lasīšana/ierakstīšana izmanto pareizu enkodēšanu.
- Datubāzēs (piemēram, MySQL) iestatiet tabulas un savienojumus uz utf8mb4, lai atbalstītu visu Unicode rakstzīmju kopu.
- Ja faili jau ir sagrozīti, izmantojiet pārkodēšanas rīkus (piem., iconv) vai redaktoru atbalsta pārkodēšanu, lai atjaunotu sākotnējo tekstu.
- Izvairieties no liekas BOM izmantošanas, ja sistēma to negaida.
- Risiniet fontu jautājumus, nodrošinot fontu, kas satur vajadzīgās rakstzīmes, vai ļaujot fontu aizvietošanu (font fallback).
Padomi izstrādātājiem un satura veidotājiem
- Vienmēr glabājiet avota failus un datubāzi vienotā kodējumā (ieteicams UTF‑8).
- Testējiet saskarsmes starp sistēmām: e‑pasts, API, CSV/TSV failu importi bieži rada kodēšanas konfliktus.
- Dokumentējiet, kāds kodējums tiek lietots (piem., projekta README), lai citi izstrādātāji to nepārkodu.
- Izmantojiet validācijas un automatizētus testus, kas pārbauda, vai nav parādījušās neparastas rakstzīmes vai aizstājējzīmes.
Mojibake nav tehniski jauns jautājums — tas pastāv tik ilgi, cik pastāv dažādi rakstzīmju kodējumi. Tomēr vienota Unicode izmantošana, rūpīga galveņu un metadatu vadība un pareiza rīku lietošana padara to viegli novēršamu mūsdienu vidē.


