Mojibake – varför text blir oläsbar (teckenkodning, UTF‑8 och Unicode)

Lär dig varför text blir oläsbar (mojibake), hur teckenkodningar fungerar och hur Unicode/UTF‑8 löser problemen — praktisk guide med lösningar och förklaringar.

Författare: Leandro Alegsa

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.

Så här kan en webbplats se ut om fel teckensnittskodning används.Zoom
Så här kan en webbplats se ut om fel teckensnittskodning används.

Den japanska Wikipedia-artikeln om Mojibake använder UTF-8-kodning. Denna skärmdump visar hur den ser ut när den avkodas med Windows standard CP1252-kodning.Zoom
Den japanska Wikipedia-artikeln om Mojibake använder UTF-8-kodning. Denna skärmdump visar hur den ser ut när den avkodas med Windows standard CP1252-kodning.

Ordets ursprung

Mojibake är ett japanskt ord. Ordet 文字化け ([moʥibake]) består av två delar. 文字 (moji) betyder bokstav, tecken. 化け (bake), från verbet 化けける (bakeru), betyder att framträda i förklädnad, att ta formen av, att förändras till det sämre. Bokstavligen betyder det "karaktärsförändring".



Frågor och svar

F: Vad är "mojibake"?


S: Mojibake är termen för felaktiga och oläsliga tecken som visas när datorprogram inte kan visa text på rätt sätt.

F: Hur kodas text när man använder datorer?


S: Text kodas med hjälp av en teckenkodning, där varje tecken ersätts med sin position eller sitt nummer i kodningen.

F: Vad händer när den ursprungliga kodningen inte anges vid överföring av text?


S: När den ursprungliga kodningen inte anges kan ett annat tecken användas när numret ersätts med det tecken som ska visas.

F: Vad är Unicode, och hur löser det detta problem?


S: Unicode är en standard för teckenkodning som kan representera de flesta tecken i två byte. Det löser problemet med att använda olika teckenkodningar och säkerställer att tecknen visas korrekt.

F: Vilka är några exempel på andra teckenkodningar som användes före Unicode?


S: ISO-8859 är ett exempel på en annan teckenkodning som användes före Unicode.

F: Hur många olika kodningar innehåller ISO-8859?


S: ISO-8859 innehåller 15 olika kodningar.

F: Är specialtecknen i ISO-8859 desamma för alla dess kodningar?


S: Nej, specialtecknen i ISO-8859 är arkiverade på olika sätt för varje kodning.


Sök
AlegsaOnline.com - 2020 / 2025 - License CC3