Mojibake (文字化け, uttalas /modʑibake/) är benämningen på felaktiga eller oläsbara tecken som visas när datorprogram inte tolkar eller visar text i rätt teckenkodning. Text i datorer representeras som tal (bytes) enligt en teckenkodning. Vid överföring eller lagring skickas dessa bytes och för att visa texten igen måste samma kodning användas för att tolka dem tillbaka till tecken. Om mottagaren tror att bytesen ligger i en annan kodning än de verkligen gör, blir resultatet ofta konstiga tecken — det är mojibake. För att minska sådana problem infördes Unicode. Den vanligaste teckenkodningen för Unicode på webben är UTF‑8, som kan koda varje Unicode-tecken med mellan 1 och 4 bytes (ASCII-tecken kräver 1 byte, många europeiska tecken 2 bytes osv).

Varför uppstår mojibake?

  • Tolkning i fel kodning: Bytes som skapats i en kodning (t.ex. ISO‑8859‑1 eller Shift_JIS) tolkas som om de vore i en annan (t.ex. UTF‑8). Resultatet blir felaktiga tecken.
  • Saknad eller felaktig deklaration: Dokument, HTTP‑svar eller e‑postmeddelanden saknar eller deklarerar fel charset, så mottagaren använder antaganden istället för korrekt kodning.
  • Blandning av system: Filen sparas i en kodning men öppnas i en annan av redigerare, databas eller verktyg som inte kommunicerar kodningen.
  • BOM‑problem: En UTF‑8 BOM (Byte Order Mark) kan visa sig som märkliga tecken ("") om filen tolkas som ISO‑8859‑1/Windows‑1252.
  • Fontbegränsningar: Ibland saknas tecknet i den använda fonten och ersätts av en ruta eller fråga — detta är inte mojibake utan fontproblem.

Exempel

Ett vanligt exempel: bokstaven "ä" i UTF‑8 representeras av två bytes: C3 A4. Om dessa bytes tolkas som ISO‑8859‑1 visas "ä". På samma sätt blir citattecken ” ofta till sekvensen “ eller â€� när UTF‑8‑bytes tolkas som Windows‑1252/ISO‑8859‑1.

Skillnad: Unicode, teckenkodning och UTF‑8

  • Unicode är en standard som ger varje tecken (bokstav, symbol, emoji m.m.) ett unikt nummer, ett så kallat kodpunkt (code point), t.ex. U+00E4 för "ä".
  • Teckenkodning (charset/encoding) är hur dessa kodpunkter översätts till bytes för lagring eller överföring. Exempel: UTF‑8, UTF‑16, ISO‑8859‑1, Windows‑1252, Shift_JIS.
  • UTF‑8 är en binär kodning för Unicode där varje kodpunkt representeras med 1–4 bytes. Den är bakåtkompatibel med ASCII (ASCII‑tecken är 1 byte) och är idag standard på webben eftersom den kan representera alla Unicode‑tecken.

Hur åtgärdar och förebygger man mojibake?

  • Konsistens är viktig: använd samma kodning i hela kedjan — fil, databas, applikation och HTTP‑header. Rekommendation: använd UTF‑8 överallt om möjligt.
  • Deklarera kodningen tydligt:
    • För webbsidor: sätt i HTML‑huvudet och/eller skicka HTTP‑header: Content-Type: text/html; charset=utf-8.
    • För e‑post: sätt korrekt MIME‑header (Content-Type: text/plain; charset="utf-8" eller liknande).
  • Vid filkonvertering: konvertera filformat korrekt (se verktyg nedan) och kontrollera resultatet i en textredigerare som visar aktuell kodning.
  • Undvik onödiga BOM i UTF‑8‑filer på webben — vissa system kan tolka BOM felaktigt. Men i andra sammanhang kan BOM hjälpa program att identifiera kodningen; välj beroende på miljö.
  • Sätt databasens teckenuppsättning (collation/charset) till UTF‑8 och kontrollera att anslutningen mellan applikation och databas använder samma encoding.

Praktiska verktyg och kommandon

  • iconv (Linux/macOS): konvertera fil encoding. Exempel:
    • iconv -f ISO-8859-1 -t UTF-8 gammal.txt -o ny.txt
  • file och enca: kan ge ledtrådar om en fils encoding (inte alltid 100 % säkert).
  • chardet (Python) eller libcharsetdetect: gissningsverktyg som kan hjälpa att avgöra sannolik kodning.
  • Textredigerare: Notepad++, VS Code och många andra kan visa eller byta filens encoding när du öppnar den.
  • Browser debugging: kontrollera Response Headers i utvecklarverktygen för Content-Type; i HTML kontrollera meta‑taggar.

Sammanfattning

Mojibake uppstår när bytes tolkas med fel teckenkodning. Lösningen är att tänka konsekvent: använd en välkänd encoding (oftast UTF‑8), deklarera den tydligt i filer och överföringsprotokoll, och kontrollera databaser och verktyg så att de alla använder samma kodning. Med rätt inställningar förhindras de flesta fall av oläslig text.