BroadNet
Das JournalEngineering
Engineering

SMS-Nachrichtenkodierung und -segmentierung: GSM-7, Unicode (UCS-2) und mehrteilige Nachrichten.

Eine SMS enthält 140 Byte: 160 GSM-7-Zeichen oder nur 70 in Unicode (UCS-2). Die Kodierung, die UDH-Richtlinien und die Segmentierung bestimmen die Zeichenbegrenzung und die Kosten Ihrer SMS.

10 Min. Lesezeit
Engineering · Ausgabe 19
10 Min. Lesezeit

ie Zeichenbegrenzung für SMS hängt ausschließlich von der Kodierung ab. Jede SMS enthält eine feste Nutzlast von 140 Byte. Eine Nachricht mit dem GSM-7-Standardalphabet umfasst daher 160 Zeichen, während eine Nachricht mit Nicht-GSM-7-Zeichen – wie Emojis, arabischen Buchstaben oder Anführungszeichen – auf 16-Bit-UCS-2 umschaltet und nur 70 Zeichen umfasst. Längere Texte werden in separat abgerechnete Segmente aufgeteilt.

Möchten Sie die Nummern für eine bestimmte Nachricht ermitteln? Fügen Sie sie in den SMS-Segmentrechner ein, um die Kodierung, die Segmentanzahl und das Zeichenbudget anzuzeigen, oder überprüfen Sie mit dem GSM-7 / Unicode-Prüfer genau, welche Zeichen Unicode erzwingen.

Alles leitet sich von 140 Bytes ab

Der Textkörper einer SMS – das Feld, das 3GPP als TP-User-Data bezeichnet – ist auf 140 Oktette bzw. 1120 Bit begrenzt. Diese Beschränkung bestimmt die Anzahl der Zeichen, die jemals angegeben werden. Die Anzahl der Zeichen, die in eine SMS passen, ergibt sich einfach aus 1120 geteilt durch die Anzahl der Bits, die jedes Zeichen belegt. Die einzige wirkliche Frage ist also, welche Kodierung Ihr Text auslöst. In der Praxis sind zwei Kodierungen relevant: GSM-7 und UCS-2.

GSM-7 vs UCS-2: Zwei Wege, dieselben 140 Bytes zu packen

GSM-7: das 7-Bit-Standardalphabet

GSM-7 ist das in 3GPP TS 23.038 definierte Standard-SMS-Alphabet. Es kodiert jedes Zeichen mit 7 Bit, sodass 1120 Bit 160 Zeichen – die übliche Grenze für eine einzelne SMS – darstellen können. Die Tabelle umfasst die lateinischen Buchstaben, Ziffern, gängige Satzzeichen und einige wenige Symbole. Wichtig ist, dass eine kleine Gruppe von Zeichen in einer Basiszeichensatzerweiterung enthalten ist und jedes dieser Zeichen zwei Septette belegt, da es als Escape-Byte gefolgt vom Zeichen kodiert wird. Diese Zeichen sind ^ { } \ [ ] ~ | und das Euro-Zeichen €. Eine mit Euro-Zeichen aufgefüllte Nachricht passt daher nur auf 80 Zeichen in eine einzelne SMS, nicht auf 160.

Mit dem GSM-7 / Unicode-Checker können Sie vor dem Absenden genau sehen, welche Zeichen in Ihrem Text innerhalb des Alphabets liegen, eine Erweiterung haben oder außerhalb des Alphabets liegen.

UCS-2: 16-Bit-Unicode

Enthält der Text auch nur ein einziges Zeichen, das GSM-7 nicht darstellen kann, wird die gesamte Nachricht in UCS-2, einer 16-Bit-Unicode-Kodierung mit fester Breite, neu kodiert. Bei 16 Bit pro Zeichen lassen sich mit 1120 Bit nur 70 Zeichen darstellen. Eine teilweise Aufwertung oder Mischen von Zeichen ist nicht möglich: Ein einziges nicht alphabetisches Zeichen halbiert das verfügbare Zeichenbudget von 160 auf 70. Dies ist kein Fehler – eine SMS deklariert eine Kodierung für ihren gesamten Inhalt, daher muss der Absender diejenige auswählen, die jedes enthaltene Zeichen darstellen kann.

Die Zeichenbegrenzungen nebeneinander

CodierungBits pro ZeichenEinzelne SMSPro Segment (mehrteilig)
GSM-7 (Standardalphabet)7160153
UCS-2 (16-Bit-Unicode)167067

Die Werte pro Segment sind niedriger als die Grenzwerte für einzelne Nachrichten, da eine verkettete Nachricht einen Teil ihrer 140 Bytes für einen Header verwendet, der im Folgenden erläutert wird. Beachten Sie, dass die oben genannten Erweiterungszeichen ebenfalls zwei GSM-7-Positionen innerhalb eines Segments belegen. Daher enthält ein Segment voller eckiger Klammern oder Euro-Zeichen deutlich weniger als 153 sichtbare Zeichen.

So funktioniert mehrteilige (verkettete) SMS

Längere Texte als eine einzelne Nachricht werden nicht abgeschnitten. Der sendende SMSC teilt sie in Segmente auf, die jeweils eine in sich abgeschlossene SMS darstellen. Das empfangende Mobiltelefon fügt diese Segmente vor der Anzeige wieder zusammen. Die Koordination erfolgt über einen Benutzerdatenheader (UDH), der dem Nutzdateninhalt jedes Segments vorangestellt ist (definiert in 3GPP TS 23.040). Bei der Standardverkettung ist der UDH 6 Byte groß und enthält eine Referenznummer, die von allen Segmenten gemeinsam genutzt wird, die Gesamtzahl der Segmente sowie die Sequenznummer des jeweiligen Segments, damit das Mobiltelefon die Segmente in der richtigen Reihenfolge wieder zusammensetzen kann.

snippet
UDH für eine verkettete SMS = 6 Bytes
05 00 03 RR TT SS
| | | | | |
| | | | | +- Sequenznummer dieses Teils (1..TT)
| | | | +---- Gesamtzahl der Teile (TT)
| | | +------- Referenznummer (in jedem Teil identisch)
| | +---------- Länge dieses Informationselements = 3
| +------------- IEI = 00 (verkettete SMS, 8-Bit-Referenz)
+---------------- UDH-Länge = 05 (5 weitere Bytes folgen)

Diese 6 Bytes stammen aus der 140 Byte großen Nutzlast, sodass 134 Bytes für den Text verbleiben. Daher enthält eine mehrteilige Nachricht 153 GSM-7-Zeichen pro Segment (der Header ist septett-ausgerichtet und belegt sieben der 160 Positionen) und 67 UCS-2-Zeichen pro Segment (134 Bytes ÷ 2). Einige Plattformen verwenden einen 7 Byte großen UDH mit einer 16-Bit-Referenznummer, wodurch sich diese Werte auf 152 bzw. 66 reduzieren. Der SMS-Segmentrechner zeigt die genaue Aufteilung für jede Nachrichtenlänge an.

Warum ein einziges Emoji oder ein einziges arabisches Zeichen alles verändert

Hier erleben Absender eine Überraschung. Da bereits ein einziges Nicht-GSM-7-Zeichen die gesamte Nachricht in UCS-2 zwingt, kann eine 150 Zeichen lange englische Benachrichtigung, die problemlos in ein Segment passt, unbemerkt auf 70 Zeichen reduziert und in drei Segmente aufgeteilt werden, sobald jemand ein Emoji oder ein stilisiertes Zitat aus einem Textverarbeitungsprogramm einfügt. Die sichtbare Zeichenanzahl bleibt dabei gleich; die Kodierung ändert sich.

Für Absender im arabischen Markt ist dies kein Sonderfall, sondern Standard. Da die arabische Schrift nicht zum GSM-7-Alphabet gehört, wird jede arabische SMS ab dem ersten Zeichen im UCS-2-Format kodiert: 70 Zeichen in einer einzelnen Nachricht, danach 67 pro Segment. Eine zweisprachige arabisch-englische Nachricht oder ein markenspezifisches arabisches OTP (Einmalpasswort) wird schnell in mehrere Segmente aufgeteilt. Teams, die in die GCC-Staaten, nach Saudi-Arabien, in die VAE und nach Ägypten versenden, sollten daher alle arabischen Vorlagen von Anfang an in UCS-2-Einheiten und nicht in GSM-7-Einheiten planen.

Häufige Zeichen, die stillschweigend eine ganze Nachricht in UCS-2 umwandeln:

  • Jegliche Art von Emojis, einschließlich eines einzelnen nachgestellten 😀, ist in einer Marketingnachricht verboten.
  • Arabisch, Hebräisch, Kyrillisch, Griechisch, Chinesisch und andere nicht-lateinische Schriften.
  • Geschwungene Anführungszeichen und Apostrophe (’ ‘ “ ”) wurden aus Textverarbeitungsprogrammen eingefügt.
  • Halbgeviertstriche und Gedankenstriche (– —), die Auslassungspunkte (…), und das geschützte Leerzeichen.
  • Viele lateinische Buchstaben mit Akzenten, die in der GSM-7-Tabelle nicht vorhanden sind.

Was die Segmentierung Sie kostet

Jedes Segment wird als separate Nachricht berechnet und abgerechnet. Eine GSM-7-Benachrichtigung mit 160 Zeichen entspricht einer abrechnungsfähigen SMS; fügt man ein weiteres Zeichen hinzu, werden daraus zwei Segmente – mit einer Kapazität von bis zu 306 Zeichen –, die als zwei Nachrichten abgerechnet werden. Ein arabisches OTP von nur 75 Zeichen entspricht bereits zwei UCS-2-Segmenten und somit zwei Nachrichten, obwohl es kurz erscheint. Bei OTP- und Kampagnen-Maßnahmen ist die korrekte Kodierung ein direkter Kostenfaktor und kein kosmetisches Detail.

  1. Transaktionsvorlagen sollten, sofern die Sprache dies zulässt, in einem Segment – 160 GSM-7 oder 70 UCS-2 – zusammengefasst werden.
  2. Beseitigen Sie versehentliche Unicode-Zeichen: Normalisieren Sie geschweifte Anführungszeichen, Bindestriche und geschützte Leerzeichen vor dem Senden in ihre GSM-7-Äquivalente.
  3. Überprüfen Sie die Kodierung und die Segmentanzahl bereits beim Kompilieren, nicht erst nach der Rechnungsstellung, mithilfe eines Prüfmechanismus in Ihrer Sendepipeline.
  4. Budget Arabic und andere nicht-lateinische Vorlagen in UCS-2 Einheiten (70 / 67) von Anfang an.
  5. Entfernen Sie variable Inhalte – URLs, lange Händlernamen –, die zur Laufzeit eine Nachricht über eine Segmentgrenze hinaus verschieben können.
Die SMS-API von BroadNet (/products/sms-api) meldet die aufgelöste Kodierung und die Segmentanzahl jeder Nachricht vor dem Versand sowie in jeder Zustellbestätigung. So können Sie die Segmentierung im Produktivbetrieb einsehen und steuern, anstatt sie erst auf der Rechnung zu entdecken. Ausführliche Informationen zu Anfragen und Antworten finden Sie in der Entwicklerdokumentation (/developers).

Häufig gestellte Fragen

Wie viele Zeichen umfasst eine SMS?

Eine SMS enthält eine Nutzlast von 140 Byte. Sie verwendet das GSM-7-Standardalphabet mit 160 Zeichen. Enthält der Text Zeichen außerhalb des GSM-7-Zeichensatzes – beispielsweise Emojis, Akzentbuchstaben, arabische Buchstaben oder Anführungszeichen –, wird die Nachricht in UCS-2 kodiert und umfasst dann 70 Zeichen. Längere Texte werden in Segmente von jeweils 153 (GSM-7) bzw. 67 (UCS-2) Zeichen unterteilt.

Warum werden meine SMS nur mit 70 Zeichen gezählt?

Da ein Zeichen im Text nicht zum GSM-7-Alphabet gehört, wurde die gesamte Nachricht als 16-Bit-UCS-2 neu kodiert, was nur 70 Zeichen zulässt. Übliche Ursachen sind Emojis, nicht-lateinische Schriftzeichen sowie geschweifte Anführungszeichen, Bindestriche oder geschützte Leerzeichen, die aus einem Textverarbeitungsprogramm eingefügt wurden. Ersetzt oder entfernt man dieses Zeichen, entspricht die Nachricht wieder dem GSM-7-Zeichenlimit von 160 Zeichen.

Was ist UCS-2-Codierung in SMS?

UCS-2 ist die 16-Bit-Unicode-Kodierung mit fester Breite, die SMS verwendet, wenn Text nicht mit dem 7-Bit-GSM-7-Alphabet dargestellt werden kann. Zwei Bytes pro Zeichen bedeuten, dass die 140 Byte lange Nutzlast 70 Zeichen in einer einzelnen Nachricht oder 67 Zeichen pro Segment in einer mehrteiligen Nachricht enthält. Jedes arabische Zeichen, Emoji oder andere Nicht-GSM-7-Zeichen im Nachrichtentext erzwingt die Verwendung von UCS-2 für die gesamte SMS.

Warum wurde meine Nachricht in zwei Teile aufgeteilt?

Der Text überschritt die für seine Kodierung zulässige Länge einer einzelnen Nachricht – 160 Zeichen in GSM-7 bzw. 70 Zeichen in UCS-2 – und wurde daher als verkettete (mehrteilige) Nachricht gesendet. Jedes Segment enthält einen 6 Byte großen Benutzerdaten-Header für die Wiederzusammensetzung, wodurch sich die Kapazität auf 153 (GSM-7) bzw. 67 (UCS-2) Zeichen pro Segment reduziert. Jedes Segment wird als separate Nachricht abgerechnet.

Referenzen

  • 3GPP TS 23.038 — Alphabete und sprachspezifische Informationen (GSM-7-Standardalphabet und UCS-2): 3gpp.org
  • 3GPP TS 23.040 — Technische Realisierung des Kurznachrichtendienstes (SMS), einschließlich des Benutzerdaten-Headers: 3gpp.org
  • BroadNet — Tools: SMS-Segmentrechner und GSM-7 / Unicode-Prüfer.
War das hilfreich?

Wie wir Inhalte erstellen und prüfen

Verfasst von

BroadNet-Redaktionsteam

Das Redaktionsteam veröffentlicht den BroadNet-Blog. Die Artikel entstehen mit den BroadNet-Teams für regulatorische Angelegenheiten, Produkt, Engineering, Branchenforschung und Betreiberlösungen und werden nach unseren redaktionellen Standards geprüft.

Das Journal, per E-Mail

Ein Aufsatz pro Monat. Sonst nichts.

Abonnieren Sie unseren Newsletter und wir senden Ihnen den nächsten Beitrag – ob zu Technik, Regulierung oder Industrie – direkt am Erscheinungstag. Keine E-Mail-Kampagnen, keine Produktpräsentationen, keine Weitergabe an Dritte. Abmeldung mit einem Klick.

Wir senden eine E-Mail pro Monat. Abmeldung jederzeit möglich. Siehe unsere Datenschutzerklärung.

Was Sie erhalten
  • Ausführlicher Text, kein Linkköder
    Sechs bis elf Minuten konzentriertes Schreiben zu einem einzigen Thema.
  • Verfasst von Bedienern
    Ingenieure, Zulassungsbeauftragte und Produktentwickler sind im eigenen Haus tätig.
  • Regionsabhängig
    MENA-zentrierte Sicht auf Regulierungsbehörden, Betreiber und Vertriebskanalmix.
  • Einmal im Monat
    Keine tröpfchenweise Kampagne. Nur ein Essay, wenn es einen zu teilen gibt.
Hör auf zu lesen. Fang an zu versenden.

Das meiste von dem, was wir schreiben, haben wir in der Produktion gelernt.

Wenn Ihnen dieser Artikel zusagte, sollten wir uns unterhalten. Schildern Sie uns Ihren Anwendungsfall, die Volumina und die Märkte – wir melden uns dann mit Routing, Preisen und einem Referenzkunden, den Sie kontaktieren können.

$ curl -X POST https://api.broadnet.me/sms/sendSms