GSM-7 vs. UCS-2: warum ein Emoji Ihre SMS-Rechnung verdoppelt

Ein Emoji kann die SMS-Rechnung unbemerkt verdoppeln oder verdreifachen. GSM 03.38 definiert zwei Kodierungen für die 140-Byte-Nutzlast: kompaktes GSM-7 mit 160 Zeichen oder UCS-2 mit 70. Jedes Zeichen außerhalb des GSM-7-Alphabets zwingt die gesamte Nachricht in UCS-2. Entwickler und Marketer, die Text aus Textverarbeitungen einfügen, merken das oft erst bei der Rechnung.

GSM-7-Packing: 160 Zeichen in 140-Byte-Nutzlast

SMS basiert auf einer festen 140-Byte-User-Data-Nutzlast. GSM 03.38 definiert ein 7-Bit-Standardalphabet, sodass diese 140 Bytes 160 Septetts fassen: 140 mal 8 geteilt durch 7 ergibt 160. Bleibt eine Nachricht vollständig in diesem Alphabet, behandeln Endgerät und SMSC sie als ein Segment mit bis zu 160 Zeichen. Der Basissatz deckt Groß- und Kleinbuchstaben des lateinischen Alphabets, Ziffern, gängige Satzzeichen sowie einige Währungs- und nationale Symbole ab. Leerzeichen, Zeilenumbrüche und übliche englische Prosa passen ohne Aufpreis.

Konkatenation ändert die Rechnung. Mehrteilige Nachrichten fügen einen User Data Header ein, damit das Empfangsgerät die Segmente in der richtigen Reihenfolge zusammensetzen kann. Ein typischer 6-Byte-UDH verbraucht Septett-Platz und lässt unter GSM-7 153 nutzbare Zeichen pro Segment. Abgerechnet wird fast immer pro Segment, nicht pro logischer Nachricht. Ein 200-Zeichen-GSM-7-Text wird so zu zwei kostenpflichtigen Segmenten (153 plus Rest). Wer den 160-vs.-153-Unterschied kennt, kann Kosten vor dem Senden abschätzen.

Erweiterungstabelle: Zeichen, die schon zwei Septetts kosten

GSM 03.38 definiert außerdem eine Erweiterungstabelle, die über ein eigenes Escape-Septett erreicht wird. Zeichen wie eckige Klammern [ ], geschweifte Klammern { }, Zirkumflex ^, Tilde ~, senkrechter Strich |, Backslash \ und das Euro-Zeichen gehören nicht zum Basiszeichensatz. Jedes davon wird als Escape plus Erweiterungscodepunkt kodiert und verbraucht daher zwei der 160 (bzw. 153) verfügbaren Septetts. Eine Nachricht, die auf dem Bildschirm kurz wirkt, kann deshalb früher eine Segmentgrenze überschreiten, als eine naive Zeichenzählung vermuten lässt.

Der Escape-Mechanismus bleibt GSM-7; er schaltet die Nachricht nicht auf UCS-2 um. Das ist entscheidend. Einige Euro-Zeichen oder Klammern lassen sich einfügen und bleiben im effizienten 7-Bit-Packing. Erst wenn der Encoder auf einen Codepoint stößt, der weder im Basisalphabet noch in der Erweiterungstabelle liegt, verlässt die ganze Nachricht GSM-7. Bis dahin zählen alle Zeichen - auch die doppelt teuren Erweiterungszeichen - weiterhin in Septetts gegen das Limit 160 bzw. 153.

ZeichenklasseVerbrauchte Septetts unter GSM-7
Basisalphabet (A–Z, a–z, 0–9, gängige Satzzeichen)1
Extension table ([ ] { } ^ ~ | \ and euro)2 (Escape + Code)
Alles außerhalb von GSM 03.38 (Emoji, typografische Anführungszeichen, die meisten nicht-lateinischen Zeichen)Erzwingt UCS-2 für die gesamte Nachricht

UCS-2-Fallback: ein Zeichen außerhalb des Alphabets kodiert alles neu

Sobald ein Zeichen nicht in GSM-7 darstellbar ist, schaltet der Encoder die gesamte Nutzdaten auf 16-Bit-UCS-2 (praktisch UTF-16-Code-Units für die BMP). Dieselbe 140-Byte-Nutzlast fasst dann nur noch 70 Zeichen. Mit Konkatenations-UDH sinkt die nutzbare Länge auf 67 Zeichen pro Segment. Es gibt keinen teilweisen Fallback: ein einziges Emoji, ein typografisches Anführungszeichen, ein Gedankenstrich oder ein Zeichen aus Arabisch, Kyrillisch, CJK oder den meisten anderen Schriften schreibt den gesamten Body um. Ein 140 Zeichen langer englischer Satz, der ein GSM-7-Segment war, wird zu drei UCS-2-Segmenten, sobald ein lächelndes Gesicht angehängt wird.

Das ist der Mechanismus hinter der Überraschungsrechnung. Marketer entwerfen Texte oft in einer Textverarbeitung, fügen sie in ein SMS-Tool ein und schleusen unbemerkt typografische Anführungszeichen oder geschützte Leerzeichen ein. Entwickler, die nutzergenerierte Namen oder Produkttitel interpolieren, können denselben unsichtbaren Auslöser einbringen. Weil die Neukodierung alles-oder-nichts ist, springt die Segmentzahl sprunghaft. Die Abrechnung multipliziert sich mit der neuen Segmentanzahl. Veröffentlichte All-in-Preise wie US $0,0125 pro Nachricht, mit Raten ab $0,004 in 149 Ländern, machen die Rechnung greifbar: jedes Extra-Segment ist eine volle Gebühr, kein Bruchteil.

KodierungLimit EinzelsegmentLimit konkateniertes Segment
GSM-7 (7-Bit)160 Zeichen153 Zeichen
UCS-2 (16-Bit)70 Zeichen67 Zeichen

Unsichtbare Fallen und Schriften, die UCS-2 erzwingen

Textverarbeitungen ersetzen gerade Apostrophe und Anführungszeichen routinemäßig durch typografische Formen, machen doppelte Bindestriche zu Gedankenstrichen und fügen geschützte Leerzeichen ein. Keiner dieser Codepoints gehört zu GSM 03.38. Eine Nachricht, die auf dem Bildschirm identisch zu einer Plain-ASCII-Version aussieht, kann daher als UCS-2 laufen und mehrere Segmente kosten. Dasselbe gilt für kopierten Inhalt von Webseiten oder Design-Tools mit reicherem Unicode. Die tatsächlichen Codepoints zu prüfen, nicht die gerenderten Glyphen, ist die einzige zuverlässige Absicherung.

Die Sprachwahl ist ebenso entscheidend. Reines Englisch, einfaches Französisch, Deutsch, Spanisch und ähnliche lateinische Schriften bleiben meist in GSM-7, wenn Akzentbuchstaben außerhalb des Standardalphabets vermieden oder transliteriert werden. Griechisch, Kyrillisch, Arabisch, Hebräisch, Devanagari, Thai und die CJK-Familie haben keine GSM-7-Zuordnung für gewöhnliche Buchstaben; jeder nennenswerte Einsatz dieser Schriften erzwingt UCS-2 für die gesamte Nachricht. Schon ein einzelner Name oder ein Produktwort in diesen Schriften reicht. Emoji jeder Art liegen definitionsgemäß außerhalb von GSM-7. Die praktische Regel ist einfach: steht das Zeichen nicht im GSM-03.38-Basis- oder Erweiterungssatz, wird die ganze Nutzlast auf 70/67 begrenzt.

Praktische Fixes vor dem Senden

Transliteration hält Nachrichten in GSM-7, kostet aber orthografische Treue. Akzentzeichen durch nächste ASCII-Äquivalente ersetzen, typografische Anführungszeichen begradigen und Gedankenstriche wieder zu Bindestrichen mappen stellt oft die 160/153-Limits wieder her. Bei Markennamen oder Rechtstexten, die exakt bleiben müssen, UCS-2 akzeptieren und die höhere Segmentzahl einplanen. Automatische Pre-Flight-Checks, die auf Nicht-GSM-7-Codepoints scannen und die resultierende Segmentzahl unter beiden Kodierungen melden, geben Entwicklern und Marketern vor dem Absenden an die SMSC ein klares Kostensignal.

Beim Bauen von Templates Variablen genau im Blick behalten: ein Kundenname in anderer Schrift oder ein Produkttitel mit Emoji kann ein ansonsten GSM-7-Template still umschalten. Zwischenablage aus Rich-Text-Quellen bereinigen oder normalisieren. In Marketing-Texten für SMS gerade ASCII-Interpunktion bevorzugen. Müssen Emoji oder nicht-lateinischer Text gesendet werden, den Body so gestalten, dass die UCS-2-Segmentgrenzen auf natürliche Phrasenenden fallen, und die Gesamtlänge in möglichst wenigen 67-Zeichen-Blöcken halten. Segmentbewusste Längenzähler, die je nach erkanntem Alphabet zwischen 160/153 und 70/67 umschalten, nehmen den meisten Überraschungen den Wind aus den Segeln. Raten variieren nach Carrier und Route; die früher genannten veröffentlichten Zahlen illustrieren das Pro-Segment-Modell, keinen Universaltarif. Bei der exakten Handset-Darstellung von Randzeichen bleibt ehrliche Unsicherheit, also auf repräsentativen Geräten testen, wenn die Nachricht zählt.

Häufig gestellte Fragen

Warum macht ein Emoji aus meiner SMS mehrere Nachrichten?
Jedes Zeichen außerhalb des GSM-03.38-Alphabets, einschließlich aller Emojis, zwingt die gesamte Nachricht von GSM-7 nach UCS-2. Die 140-Byte-Payload fasst dann 70 Zeichen statt 160 (67 statt 153 bei Konkatenation). Ein Text, der in ein GSM-7-Segment passte, kann so zu zwei oder drei UCS-2-Segmenten werden; abgerechnet wird pro Segment.
Ändern geschweifte Anführungszeichen und Gedankenstriche wirklich die SMS-Kodierung?
Ja. Typografische geschweifte Anführungszeichen, Gedankenstriche, Halbgeviertstriche und geschützte Leerzeichen gehören nicht zum GSM-7-Basis- oder Erweiterungssatz. Einfügen aus einer Textverarbeitung kodiert die ganze Nachricht als UCS-2 um und senkt das Limit pro Segment von 160/153 auf 70/67, auch wenn der Text unverändert wirkt.
Wie viele Zeichen passen in eine verkettete SMS unter GSM-7 bzw. UCS-2?
Unter GSM-7 fasst ein verkettetes Segment nach typischem 6-Byte-UDH 153 Zeichen. Unter UCS-2 bleiben mit demselben Header 67 Zeichen pro Segment. Einzel-Segment-Limits: 160 (GSM-7) und 70 (UCS-2). Die Segmentanzahl, nicht die logische Nachrichtenanzahl, bestimmt die Kosten.

Verwandt