Mojibake: Hvad er det? Årsager, UTF-8/Unicode og løsninger

Forstå mojibake: hvorfor tekst bliver ulæselig, hvordan Unicode/UTF-8 løser det, og praktiske løsninger til at rette tegnkodningsfejl.

Forfatter: Leandro Alegsa

Mojibake (文字化け, udtales /modʑibake/) er betegnelsen for ukorrekte, ulæselige tegn, der vises, når computersoftware ikke viser teksten korrekt. Når man bruger computere, er tekst kodet ved hjælp af en tegnkodning. Ved overførsel erstattes hvert tegn med dets position (eller nummer) i kodningen. For at vise tegnet igen erstattes positionen igen med tegnet. Når den oprindelige kodning ikke er angivet, kan der anvendes et andet tegn, når nummeret igen erstattes med det tegn, der skal vises. Unicode blev indført for at løse dette problem: UTF-8 er i stand til at kode de mest almindelige tegn i 2 bytes.

Hvad er mojibake — kort forklaring

Mojibake opstår, når tekst, der er kodet i én tegnsætning (f.eks. UTF-8, ISO-8859-1 eller Shift_JIS), fortolkes som om den tilhører en anden tegnsætning. Resultatet bliver mærkelige tegnkombinationer eller symboler i stedet for den oprindelige tekst. Ordet kommer fra japansk og betyder bogstaveligt "tegn (moji) der er forvandlet (bake)".

Hvorfor opstår mojibake?

  • Manglende eller forkert angivelse af tegnsætning: Websider, e-mails eller filer uden korrekt charset-metadata lader modtagerprogrammet gætte forkert.
  • Uoverensstemmende systemindstillinger: F.eks. når en fil oprettes i UTF-8, men åbnes med en editor, der tolker den som ISO-8859-1 eller Windows-1252.
  • Database- eller netværksfejl: Når forbindelsen mellem applikation og database ikke bruger samme tegnsætning, kan tekst blive fejlkodet ved indsættelse eller hentning.
  • Forkert konvertering: Gentagen eller forkert konvertering mellem kodninger (f.eks. at konvertere UTF-8-tekst, der allerede er tolket som ISO-8859-1).
  • Fontmangler: Selvom sjældnere, kan manglende glyphs i en font få systemet til at vise erstatningstegn (som �), som kan forveksles med mojibake.

Typiske eksempler

  • Dansk æ/ø/å, der viser som "æ", "ø", "Ã¥" — ofte når UTF-8 bliver læst som ISO-8859-1 eller Windows-1252.
  • Japanske tegn, der bliver til tilfældige latinske tegn eller spørgsmålstegn, hvis Shift_JIS/ EUC-JP tolkes som UTF-8.
  • Visning af erstatningstegnet U+FFFD (�) som tegn, der ikke kunne dekodes.

Unicode og UTF-8 — hvorfor det hjælper

Unicode er et standardiseret sæt af tegn, hvor hvert tegn har et entydigt nummer (kodepunkt). UTF-8 er en variabel-længde kodning af Unicode og er i dag standarden på webben. Fordele:

  • Kan repræsentere næsten alle verdens skriftsystemer.
  • Tilbagekompatibel med ASCII for de første 128 tegn.
  • Reducerer sandsynligheden for mojibake, hvis alle systemer i kæden bruger UTF-8 korrekt.

BOM (Byte Order Mark) og andre faldgruber

En BOM (typisk tre bytes EF BB BF for UTF-8) kan nogle gange skabe problemer, hvis programmet ikke forventer den. Eksempelvis kan en BOM i starten af en fil blive vist som mærkelige tegn i visse ældre systemer eller bryde tolkningen af headers i nogle applikationer. Nogle systemer kræver UTF-8 uden BOM til webindhold.

Sådan retter du mojibake — praktiske trin

1) Identificer kodningen

  • Brug værktøjer som chardet (Python), enca, eller kommandoen file --mime-encoding filnavn på Unix.
  • Prøv at åbne filen i en teksteditor (Notepad++, VS Code) og skift kodning midlertidigt for at se, hvilken der giver korrekt tekst.

2) Konverter filen til UTF-8

  • På Linux/Unix: iconv -f WINDOWS-1252 -t UTF-8 input.txt -o output.txt
  • I Notepad++: Encoding → Convert to UTF-8 (eller UTF-8 without BOM) → Save.
  • I VS Code: File → Save With Encoding → UTF-8.

3) Websider

  • Sørg for, at serveren sender korrekt header, fx: Content-Type: text/html; charset=utf-8.
  • Inkluder i HTML: <meta charset="utf-8"> i <head> for at hjælpe browsere.
  • Gem HTML-filer i UTF-8 (helst uden BOM til kompatibilitet).

4) Databaser

  • Sikre at database, tabeller og kolonner bruger UTF-8 (eller en Unicode-variant), f.eks. utf8mb4 i MySQL for fuld Unicode-support.
  • Indstil forbindelses-charset ved tilslutning: i MySQL f.eks. SET NAMES 'utf8mb4' eller brug parameter i klientbiblioteket.
  • Test indsættelse og læsning for at sikre, at ingen kodningskonvertering sker utilsigtet.

5) E-mails

  • Sæt korrekt header: Content-Type: text/plain; charset="utf-8" eller Content-Type: text/html; charset="utf-8".
  • Brug base64 eller quoted-printable til at transmittere ikke-ASCII indhold for at undgå ændringer i transporten.

6) Programmering

  • I Python: håndter bytes og strings eksplicit — brug bytes.decode('utf-8') og str.encode('utf-8').
  • I Java: brug new String(bytes, StandardCharsets.UTF_8) og getBytes(StandardCharsets.UTF_8).
  • Kontrollér fil-IO, netværksbiblioteker og framework-indstillinger for deres standard-charset.

Værktøjer og metoder til fejlfinding

  • chardet (Python) — heuristisk gæt af kodning.
  • enca — intelligent detektion og konvertering for mange sprog.
  • file --mime-encoding, iconv, recode — systemværktøjer til detektion og konvertering.
  • Teksteditorer med support for at skifte visningskodning (Notepad++, Sublime, VS Code).

Forebyggelse — bedste praksis

  • Brug UTF-8 konsekvent gennem hele kæden: fra redigering, gennem applikationer, netværk og op til opbevaring (filer/databaser).
  • Angiv charset eksplicit i HTTP-headers, HTML-meta-tags og e-mail headers.
  • Undgå unødvendige konverteringer; dokumentér hvilke kodninger der bruges i systemet.
  • Test med eksempler fra de sprog og specialtegn, der er relevante for din brugergruppe.

Opsummering

Mojibake er symptom på en kodningsfejl: tekst er gemt i én kodning, men læses som en anden. Løsningen er at identificere den rigtige kodning og konvertere eller konfigurere systemet, så hele kæden bruger Unicode/UTF-8. Med korrekte headers, databaseindstillinger og arbejdsrutiner kan de fleste tilfælde af mojibake undgås.

Sådan kan et websted se ud, hvis der anvendes en forkert kodning af skrifttypen.Zoom
Sådan kan et websted se ud, hvis der anvendes en forkert kodning af skrifttypen.

Den japanske Wikipedia-artikel om Mojibake bruger UTF-8-kodning. Dette skærmbillede viser, hvordan den ser ud, når den afkodes ved hjælp af standard Windows CP1252-enkodning.Zoom
Den japanske Wikipedia-artikel om Mojibake bruger UTF-8-kodning. Dette skærmbillede viser, hvordan den ser ud, når den afkodes ved hjælp af standard Windows CP1252-enkodning.

Ordets oprindelse

Mojibake er et japansk ord. Ordet 文字化け ([moʥibake]) består af to dele. 文字 (moji) betyder bogstav, tegn. 化け (bake), fra verbet 化けける (bakeru), betyder at optræde forklædt, at tage form af, at ændre sig til det værre. Bogstaveligt betyder det "karaktermutation".



Spørgsmål og svar

Q: Hvad er "mojibake"?


A: Mojibake er betegnelsen for forkerte og ulæselige tegn, der vises, når computersoftware ikke kan vise tekst korrekt.

Q: Hvordan kodes tekst, når man bruger computere?


A: Tekst kodes ved hjælp af en tegnkodning, hvor hvert tegn erstattes af dets position eller nummer i kodningen.

Q: Hvad sker der, når den oprindelige kodning ikke er angivet, når man overfører tekst?


A: Når den oprindelige kodning ikke er angivet, kan der bruges et andet tegn, når nummeret erstattes med det tegn, der skal vises.

Q: Hvad er Unicode, og hvordan løser det dette problem?


A: Unicode er en tegnkodningsstandard, der kan repræsentere de fleste tegn i to bytes. Det løser problemet med at bruge forskellige tegnkodninger og sikrer, at tegnene vises korrekt.

Q: Hvad er nogle eksempler på andre tegnkodninger, der blev brugt før Unicode?


A: ISO-8859 er et eksempel på en anden tegnkodning, der blev brugt før Unicode.

Q: Hvor mange forskellige kodninger indeholder ISO-8859?


A: ISO-8859 indeholder 15 forskellige kodninger.

Q: Er specialtegnene i ISO-8859 de samme for alle kodningerne?


A: Nej, specialtegnene i ISO-8859 er arkiveret forskelligt for hver kodning.


Søge
AlegsaOnline.com - 2020 / 2025 - License CC3