Vier Arten, denselben Text zu zählen

Computer speichern Text als Zahlen, und es gibt mehr als eine sinnvolle Art, diese Zahlen zu zählen. Apps und Spiele wählen eine davon – meist ohne es dir zu sagen –, sodass derselbe Name an einer Stelle passt und an einer anderen „zu lang“ ist.

Das Familien-Emoji auf vier Arten gemessen: 1 sichtbares Zeichen, 5 Codepunkte, 8 UTF-16-Einheiten und 18 UTF-8-Bytes.
Derselbe Text, vier verschiedene Längen.
Die vier Messgrößen
MessgrößeWas gezählt wird
Grapheme (sichtbare Zeichen)Was ein Leser als ein Zeichen wahrnimmt, auch wenn es aus mehreren Teilen besteht.
CodepunkteJedes Unicode-Zeichen einzeln, einschließlich unsichtbarer Verbinder und kombinierender Zeichen.
UTF-16-EinheitenDie Speichereinheit in JavaScript, Java, Windows und vielen Apps. Zeichen oberhalb von U+FFFF belegen zwei.
UTF-8-BytesDie Größe beim Speichern oder Senden als UTF-8, der üblichen Kodierung im Web: 1 bis 4 Bytes pro Codepunkt.

Getestete Beispiele

Jede Zahl unten wurde per Code erzeugt, nicht von Hand eingetippt: Grapheme mit Intl.Segmenter in Node.js 22.22.2 (ICU 78.2, Unicode 17.0), die übrigen Zählungen aus dem kodierten Text, gegengeprüft in Python. Verschiedene Softwareversionen können sich bei komplexen Schriften gelegentlich über Graphemgrenzen uneinig sein.

Zehn Texte, je vier Längen
TextWas es istGraphemeCodepunkteUTF-16UTF-8-Bytes
LunaEinfache lateinische Buchstaben4444
Zoëë als ein Zeichen (U+00EB)3334
Zoëe + kombinierendes Trema (U+0308)3445
𝓛𝓾𝓷𝓪Fette Schreibschrift-Buchstaben (Mathematical Alphanumeric Symbols)44816
꧁Luna꧂Name in einem Rahmen aus javanischen Satzzeichen66610
Luna🔥Name + ein Emoji5568
👍🏽Emoji + Hautton-Modifikator1248
🇯🇵Flagge (zwei regionale Indikatorbuchstaben)1248
👨‍👩‍👧Familien-Emoji (drei Emojis, verbunden durch Zero-Width Joiner)15818
ليلىArabische Buchstaben4448

Grapheme: was du tatsächlich siehst

Unicode Standard Annex #29 definiert erweiterte Graphem-Cluster – die Zeichen, wie Nutzer sie wahrnehmen. Ein Buchstabe mit kombinierendem Akzent, ein Emoji mit Hautton, eine Flagge aus zwei regionalen Indikatorbuchstaben und ein mit Zero-Width Joinern verbundenes Familien-Emoji sind jeweils ein Graphem.

Im Inneren des Familien-Emojis

Ein sichtbares Zeichen, fünf Codepunkte
CodepunktNameUTF-16Bytes
U+1F468Mann24
U+200DZero Width Joiner13
U+1F469Frau24
U+200DZero Width Joiner13
U+1F467Mädchen24

Codepunkte: die Unicode-Nummern

Ein Codepunkt ist die Nummer eines Zeichens in Unicode, geschrieben als U+ gefolgt von Hexadezimalziffern. „ë“ lässt sich als ein Codepunkt (U+00EB) oder als „e“ plus U+0308 COMBINING DIAERESIS schreiben. Beides sieht gleich aus – deshalb können zwei gleich aussehende Namen unterschiedlich gezählt werden, und deshalb normalisieren manche Apps Text zuerst.

UTF-16: warum gestylte Buchstaben doppelt zählen

UTF-16 speichert Codepunkte bis U+FFFF in einer 16-Bit-Einheit und alles darüber in zweien (einem Surrogatpaar). Die fetten, Schreibschrift- und Frakturbuchstaben auf NameFonts stammen überwiegend aus dem Block Mathematical Alphanumeric Symbols (U+1D400–U+1D7FF), und die meisten Emojis liegen ebenfalls oberhalb von U+FFFF – jedes belegt also zwei Einheiten. Die neun neuen Emojis in Unicode 18.0 sind keine Ausnahme. In JavaScript ergibt "𝓛".length den Wert 2.

UTF-8: Bytes auf der Festplatte und im Netz

UTF-8 braucht 1 Byte für ASCII-Buchstaben, 2 Bytes für die meisten lateinischen Akzentbuchstaben, Griechisch, Kyrillisch, Arabisch und Hebräisch, 3 Bytes für die meisten anderen Zeichen bis U+FFFF (einschließlich CJK und vieler Symbole) und 4 Bytes darüber. Grenzen von Datenbanken und Netzwerken werden oft in Bytes angegeben.

Welche nutzt meine App?

Wir nennen keine Grenzen für bestimmte Apps oder Spiele: Sie sind selten dokumentiert und ändern sich. Mit einem kurzen Test findest du heraus, welche Einheit eine App zählt:

  1. Tippe einen einfachen Namen bis zum Limit und notiere die Zahl.
  2. Ersetze einen Buchstaben durch einen gestylten (zum Beispiel aus dem Schreibschrift-Generator).
  3. Zählt der Name jetzt eins mehr, zählt die App UTF-16-Einheiten; bleibt die Zahl gleich, zählt sie Grapheme oder Codepunkte.
  4. Probiere „Zoë“ in beiden Schreibweisen (aus der Tabelle oben), um Grapheme von Codepunkten zu unterscheiden.

Häufige Fragen

Warum zählt mein Name mehr Zeichen, als ich sehe?

Manche sichtbaren Zeichen bestehen aus mehreren Codepunkten, und Zeichen oberhalb von U+FFFF belegen zwei UTF-16-Einheiten. Apps, die Codepunkte oder UTF-16-Einheiten zählen, melden eine größere Zahl, als du siehst.

Ist ein Graphem dasselbe wie ein Buchstabe?

Nicht immer. Ein Graphem ist das, was ein Leser als ein Zeichen wahrnimmt. Bei lateinischem Text ist es meist ein Buchstabe, aber auch eine Emoji-Sequenz oder ein Buchstabe mit kombinierenden Zeichen ist ein Graphem.

Quellen

Nächster Schritt

Füge deinen eigenen Namen ein, um alle vier Zählungen Zeichen für Zeichen zu sehen.