Standards & Formate

Zeichenkodierung: ASCII, UTF-8 und QR-Codes

Warum derselbe QR-Code auf einem Handy verstümmelten Text und auf einem anderen sauberen Text anzeigt – die Zeichenkodierung, erklärt.

Die Zeichenkodierung ist die unsichtbare Vereinbarung, die die Buchstaben, die du tippst, in die Zahlen verwandelt, die ein Computer speichert – und wenn ein QR-Code und ein Scanner sich uneinig sind, welche Vereinbarung sie verwenden, ist genau das der Moment, in dem deine Akzentbuchstaben und Emojis zu verstümmeltem Unsinn werden.

Hast du je einen QR-Code gescannt und gesehen, wie café als café herauskam? Oder wie ein Emoji zu einer Reihe von Fragezeichen wurde? Dann bist du auf eine Fehlanpassung der Zeichenkodierung gestoßen. Es ist einer der häufigsten stillen Kobolde in der QR-Welt, und sobald du ASCII, Latin-1, UTF-8 und einen Mechanismus namens ECI verstehst, ergibt alles einen Sinn. Lass uns das entwirren. 🐾

Warum Text zu Zahlen werden muss

Computer speichern nur Zahlen. Ein QR-Code enthält im Kern einen Strom von Bits – Einsen und Nullen –, die sich zu Bytes gruppieren (Zahlen von 0 bis 255). Um den Buchstaben „A“ zu speichern, vereinbaren wir zunächst, dass „A“ einer bestimmten Zahl entspricht, und speichern dann diese Zahl. Die Zeichenkodierung ist diese Vereinbarung: eine Nachschlagetabelle, die Zeichen auf Zahlen und zurück abbildet. Unser Begleitartikel darüber, wie Computer Text darstellen, behandelt die Grundlagen; hier konzentrieren wir uns darauf, was es für QR bedeutet.

ASCII: die ursprünglichen 128

ASCII ist der Urvater der Kodierungen. Es definiert 128 Zeichen – die groß- und kleingeschriebenen englischen Buchstaben, die Ziffern, gängige Satzzeichen und ein Leerzeichen –, jedes auf eine Zahl von 0 bis 127 abgebildet. „A“ ist 65, „a“ ist 97, „0“ ist 48 und so weiter. Sieben Bits reichen aus, um alle 128 abzudecken.

ASCII ist einfach und universell: Jede heute relevante Kodierung stimmt bei diesen ersten 128 Zeichen mit ASCII überein. Der Haken ist, was ihm fehlt – keine Akzentbuchstaben, kein „£“ oder „€“, keine nicht-englischen Schriften und schon gar keine Emojis. Für schlichtes Englisch funktioniert ASCII einfach, und ein QR-Code, der nur ASCII-Zeichen enthält, ist ungefähr so sicher und portabel, wie es nur geht.

Latin-1: die zweite Hälfte füllen

Bytes können Werte von 0 bis 255 aufnehmen, also gibt es Platz für weitere 128 Zeichen über ASCII hinaus. Latin-1 (formal ISO-8859-1) nutzt diesen oberen Bereich, um viele westeuropäische Zeichen hinzuzufügen: „é“, „ñ“, „ü“, „ç“, „£“ und Freunde. Die Werte 0–127 bleiben identisch mit ASCII; die Werte 128–255 tragen die Extras.

Latin-1 ist für QR-Codes von Bedeutung, weil es die Standardannahme ist, die viele Scanner beim Lesen im Byte-Modus treffen. Wenn die Bytes eines Codes als Latin-1 geschrieben und als Latin-1 gelesen wurden, kommt westeuropäischer Text mit Akzenten perfekt durch. Probleme beginnen, wenn eine Seite Latin-1 annimmt und die andere etwas anderes.

UTF-8: eine Kodierung, sie alle zu beherrschen

UTF-8 ist die moderne universelle Kodierung und das, was der Großteil des Webs verwendet. Es kann jedes Zeichen in Unicode darstellen – jede Schrift, jedes Symbol und jedes Emoji auf der Erde –, indem es eine variable Anzahl von Bytes pro Zeichen verwendet:

  • Die 128 ASCII-Zeichen verwenden weiterhin ein einzelnes Byte (und sind Byte für Byte identisch mit ASCII).
  • Akzentbuchstaben und viele gängige Zeichen verwenden zwei Bytes.
  • Seltenere Zeichen verwenden drei Bytes.
  • Emojis und seltenere Symbole verwenden vier Bytes.

Diese Abwärtskompatibilität mit ASCII ist genial: schlichter englischer Text ist in ASCII und UTF-8 identisch. Aber ein „é“ ist in UTF-8 zwei Bytes, während es in Latin-1 ein Byte ist. Dieser eine Unterschied ist die Wurzel der meisten QR-Verstümmelungen.

Der Buchstabe „é“ ist ein Byte in Latin-1, aber zwei Bytes in UTF-8. Wenn ein Code auf die eine Weise geschrieben und auf die andere gelesen wird, zeigt sich die Fehlanpassung als Kauderwelsch wie „é“.

Wo QR-Codes hineinpassen

QR-Codes haben vier Kodierungsmodi, und Text reist meist im Byte-Modus (8 Bit pro Zeichen). Der Byte-Modus speichert rohe Byte-Werte, sagt aber nicht von sich aus, welchen Zeichensatz diese Bytes darstellen. Unser Leitfaden zu den QR-Code-Kodierungsmodi behandelt alle vier Modi; der entscheidende Punkt hier ist, dass der Byte-Modus der Ort ist, an dem die Kodierungsfrage entsteht.

Wenn also ein Generator „café“ kodiert und ein Scanner es dekodiert, müssen sich beide auf den Zeichensatz einigen. Tun sie das nicht, bekommst du Mojibake – der technische (und recht charmante) Name für verstümmelten dekodierten Text.

ECI: den Zeichensatz deklarieren

Der QR-Standard hat eine echte Lösung: ECI, oder Extended Channel Interpretation. ECI ist eine kleine Markierung, die der Encoder in die Daten setzen kann, um im Grunde zu sagen: „Die folgenden Bytes verwenden Zeichensatz Nummer X“ – zum Beispiel UTF-8. Ein Scanner, der ECI versteht, liest die Markierung und interpretiert die Bytes korrekt, sodass „é“ und Emojis wie beabsichtigt durchkommen.

Der Haken ist, dass nicht jeder Scanner oder Generator ECI perfekt handhabt. Wenn ECI fehlt, muss ein Lesegerät raten. Manche nehmen Latin-1 an; manche versuchen, UTF-8 automatisch zu erkennen; die Ergebnisse variieren je nach App und Handy. Diese Inkonsistenz ist der Grund, warum derselbe Code auf einem Handy gut aussehen und auf einem anderen verstümmelt sein kann.

Warum Emojis und Akzente manchmal verstümmeln

Jetzt löst sich das Rätsel von selbst. Verstümmelung passiert, wenn die Kodierung, mit der der Code geschrieben wird, und die Kodierung, mit der er gelesen wird, nicht übereinstimmen. Häufige Szenarien:

  • UTF-8 geschrieben, Latin-1 gelesen. Die zwei Bytes eines UTF-8-„é“ werden als zwei separate Latin-1-Zeichen gelesen und ergeben „é“.
  • Keine ECI-Markierung. Der Scanner rät den Zeichensatz und rät falsch.
  • Überall Emojis. Emojis existieren nur in Unicode und benötigen UTF-8; ein Scanner, der Latin-1 annimmt, kann sie nicht darstellen und zeigt Fragezeichen oder Kästchen.
  • Alte Scanner. Manche älteren Lesegeräte unterstützen ECI oder UTF-8 nicht gut, sodass alles jenseits von ASCII ein Glücksspiel ist.
KodierungDeckt abBytes pro ZeichenAnmerkungen
ASCIIEnglische Buchstaben, Ziffern, Basis-Satzzeichen1 (Werte 0–127)Universell sicher
Latin-1ASCII + westeuropäische Akzente1 (Werte 0–255)Häufiger QR-Standard
UTF-8Jedes Unicode-Zeichen + Emojis1 bis 4Web-Standard; braucht ECI in QR für Zuverlässigkeit

Wie du verstümmelte QR-Codes vermeidest

Ein paar freundliche Gewohnheiten halten deine Codes sauber:

  1. Bleib bei schlichtem ASCII, wann immer du kannst. Grundlegende englische Buchstaben, Ziffern und einfache Satzzeichen werden überall identisch dekodiert. Das ist die einzige zuverlässigste Wahl.
  2. Verwende einen Generator, der ECI für UTF-8 hinzufügt. Wenn du Akzente oder nicht-lateinischen Text brauchst, stelle sicher, dass das Werkzeug UTF-8 über ECI signalisiert, damit konforme Scanner es korrekt interpretieren.
  3. Teste auf mehreren Handys. Scanne deinen fertigen Code mit ein paar verschiedenen Geräten, bevor du Tausende von Exemplaren druckst.
  4. Sei sparsam mit Emojis. Sie sind der fragilste Inhalt über Scanner hinweg. Wunderbar, wenn sie funktionieren, riskant, wenn nicht.
  5. Prozent-kodiere heikle Zeichen in URLs. Bei Links umgeht die Verwendung der Standard-URL-Kodierung für Sonderzeichen viele Probleme von vornherein.

Das größere Bild

Die Zeichenkodierung ist eine jener grundlegenden Ideen, die alles Digitale berührt, nicht nur QR-Codes. Wenn du die Version von Grund auf möchtest, passen unsere Leitfäden dazu, wie Computer Text darstellen und die QR-Kodierungsmodi, gut zu diesem hier. Und für die Anatomie, wo diese Bytes tatsächlich im Quadrat leben, siehe die Anatomie eines QR-Codes.

Wenn du einen Code mit QR Puppy erstellst, musst du dir über die Kodierung keine Sorgen machen – aber zu wissen, was unter der Haube passiert, hilft dir, Probleme früh zu erkennen. Bereit, einen auszuprobieren? Du kannst in Sekunden einen kostenlosen QR-Code erstellen, statisch und standardkonform.

Häufig gestellte Fragen

Warum wird mein Text mit Akzenten zu seltsamen Symbolen?

Weil der Code in einer Kodierung geschrieben (oft UTF-8) und in einer anderen gelesen wurde (oft Latin-1). Ein UTF-8-„é“ sind zwei Bytes, die ein Latin-1-Lesegerät als zwei merkwürdige Zeichen wie „é“ anzeigt. ECI zu verwenden, um UTF-8 zu deklarieren, oder bei schlichtem ASCII zu bleiben, vermeidet das.

Kann ein QR-Code Emojis enthalten?

Ja, aber mit Vorsicht. Emojis erfordern UTF-8, und der Code sollte das mit ECI signalisieren. Selbst dann stellen manche Scanner Emojis nicht gut dar, sodass sie der unzuverlässigste Inhalt sind. Teste breit, bevor du dich auf sie verlässt.

Was ist ECI, einfach ausgedrückt?

ECI (Extended Channel Interpretation) ist eine kleine Markierung innerhalb des QR-Codes, die dem Scanner mitteilt, welchen Zeichensatz die Bytes verwenden, etwa UTF-8. Sie hilft nicht-englischen Zeichen, korrekt zu dekodieren, statt zu verstümmeln – vorausgesetzt, der Scanner unterstützt ECI.

Ist ASCII-Text in einem QR-Code immer sicher?

Praktisch ja. Die 128 ASCII-Zeichen (englische Buchstaben, Ziffern, Basis-Satzzeichen) bilden auf dieselben Byte-Werte in ASCII, Latin-1 und UTF-8 ab, sodass sie auf praktisch jedem Scanner identisch dekodieren. Es ist der sicherste Inhalt, den du verwenden kannst.

Beeinflusst die Kodierung, wie groß mein QR-Code ist?

Das kann sie. UTF-8 verwendet mehr Bytes für Akzentzeichen und Emojis (zwei bis vier je) als ASCII oder Latin-1, sodass Text mit vielen Sonderzeichen einen größeren, dichteren Code erzeugt. Siehe unseren Leitfaden zur Datenkapazität, wie die Länge die Größe beeinflusst.

Erstelle einen QR-Code auf die ehrliche Art 🐾

Für immer kostenlos, kein Tracking, kein Ablauf — direkt in deinem Browser erzeugt.

🎨 QR-Code erstellen →