Comment se calcule la longueur d'un SMS
Un SMS transporte 140 octets (1 120 bits) de données utiles. Avec l'alphabet GSM 7 bits par défaut, chaque caractère occupe 7 bits : 140 octets contiennent donc 160 caractères. En UCS-2 (l'encodage Unicode 16 bits utilisé pour les SMS), chaque caractère occupe 2 octets : le même espace contient 70 caractères.
Lorsqu'un message dépasse un SMS, il est envoyé en SMS concaténé. Chaque partie commence par un en-tête UDH (User Data Header) de 6 octets qui indique un numéro de référence, le nombre total de parties et la position de la partie, pour que le téléphone puisse les réassembler. Il reste 134 octets par partie : 153 caractères GSM-7 ou 67 caractères UCS-2.
Le destinataire voit un seul message, mais opérateurs et fournisseurs facturent chaque partie. Un message GSM-7 de 161 caractères coûte deux SMS, tout comme un message arabe de 71 caractères.
- GSM-7 : 160 caractères en un SMS, 153 par partie en mode concaténé (306 pour 2 parties, 459 pour 3).
- UCS-2 : 70 caractères en un SMS, 67 par partie en mode concaténé (134 pour 2 parties, 201 pour 3).
- Un seul caractère hors GSM-7, n'importe où dans le texte, fait passer tout le message en UCS-2.
L'alphabet GSM-7 et sa table d'extension
L'alphabet GSM 7 bits par défaut est défini dans la norme 3GPP TS 23.038 (anciennement GSM 03.38). Sa table de base compte 128 positions : lettres latines et chiffres, ponctuation courante et des caractères comme @ £ $ ¥ è é ù ì ò Ç Ø ø Å å Ä Ö Ñ Ü ä ö ñ ü à ß Æ æ É ¿ ¡ § ainsi que les majuscules grecques Δ Φ Γ Λ Ω Π Ψ Σ Θ Ξ. Le saut de ligne et le retour chariot comptent aussi pour un caractère.
Dix autres caractères se trouvent dans la table d'extension et sont précédés d'un code d'échappement : chacun coûte donc deux septets. Il s'agit de l'euro €, de l'accent circonflexe ^, des accolades { }, des crochets [ ], du tilde ~, de la barre verticale |, de la barre oblique inverse \ et du saut de page. Un message de 158 lettres et un € fait exactement 160 septets ; une lettre de plus et il passe à deux segments.
Une séquence d'échappement doit rester dans une seule partie : un caractère de deux septets qui chevaucherait la limite des 153 septets passe à la partie suivante. Ce compteur applique cette règle, ce qui explique qu'une partie puisse s'arrêter à 152.
La norme TS 23.038 définit aussi des tables de décalage nationales (turc, espagnol, portugais et plusieurs écritures indiennes, par exemple) qui permettent de rester en 7 bits. Leur prise en charge dépend du réseau et du téléphone : la plupart des plateformes, comme ce compteur, n'utilisent que l'alphabet par défaut.
Les caractères qui font basculer un SMS en Unicode
La plupart des messages limités à 70 caractères par surprise viennent d'un texte copié depuis un traitement de texte, un CMS ou un clavier de téléphone qui insère automatiquement des caractères typographiques. Ils ressemblent presque à leurs équivalents GSM-7, mais ce sont d'autres points de code.
Les lettres accentuées absentes de la table, comme â ê î ô û ë ï et le ç minuscule, forcent aussi l'UCS-2. En français, beaucoup de messages basculent ainsi en Unicode : ne supprimez les accents que si votre public l'accepte, car une orthographe correcte vaut souvent plus qu'un segment supplémentaire.
- Guillemets et apostrophes typographiques ‘ ’ “ ” « » (utilisez ' et ").
- Tirets demi-cadratin et cadratin – — (utilisez -) et points de suspension … (utilisez ...).
- Espaces insécables et fines, souvent invisibles après un copier-coller, très fréquentes en français avant : ? ! (utilisez une espace normale).
- Caractères de largeur nulle et marques d'ordre d'octets cachés dans les modèles (supprimez-les).
- Emoji : la plupart occupent 2 unités UCS-2, un drapeau ou un emoji avec teinte de peau 4, et une séquence « famille » 8 ou plus.
Convertir un message en GSM-7 en un clic
Quand un message est en Unicode, le bouton Convertir en GSM-7 le réécrit avec des caractères GSM-7 uniquement là où c'est sans risque : guillemets et tirets typographiques deviennent simples, les espaces invisibles sont supprimées, les accents absents de GSM-7 sont retirés (â → a, ê → e, ç minuscule → Ç) et les ligatures et symboles sont écrits en toutes lettres (œ → oe, ™ → TM). Les caractères déjà présents dans GSM-7, comme é, è, à, ù et €, sont conservés.
L'outil liste chaque modification, affiche le nombre de segments avant et après, et Annuler rétablit votre texte d'origine. L'arabe ne peut pas être converti : un message en arabe reste toujours en Unicode à 70 caractères par SMS, raccourcissez-le ou envoyez-le sur WhatsApp. Les emoji et les autres écritures non latines restent également inchangés.
SMS en arabe : 70 caractères, 67 par partie
Les lettres arabes ne font pas partie du GSM-7 : tout SMS en arabe est envoyé en UCS-2, soit 70 caractères en un message et 67 par partie au-delà. Un message arabe de 140 caractères représente trois segments facturés, pas deux, car 140 dépasse 2 × 67 = 134.
Chaque point de code compte : espaces, lettres latines mêlées au texte, chiffres arabo-indiens et signes diacritiques (tashkil). Un mot entièrement vocalisé peut consommer deux fois plus d'unités que le même mot sans harakat : omettez les diacritiques dans les messages transactionnels, sauf s'ils sont nécessaires pour lever une ambiguïté.
Pour les OTP et alertes dans les pays du Golfe, gardez si possible le texte arabe sous 70 caractères, placez le code en début de message et évitez les emoji. Si vous envoyez la même alerte en anglais, la version anglaise peut être plus de deux fois plus longue pour le même prix.
Des segments au coût
Votre facture SMS mensuelle dépend des segments, pas des messages : segments par message × messages par mois × tarif du réseau de destination. Passer une campagne de 2 segments à 1 divise par deux le coût de chaque envoi.
Vérifiez le texte final avec les variables remplies. Un nom de client, un numéro de commande ou un lien raccourci peut faire franchir une limite, et un nom en arabe ou accentué peut faire passer un modèle GSM-7 en UCS-2 pour certains destinataires seulement.
- Testez les valeurs réalistes les plus longues de chaque variable.
- Raccourcissez les liens et supprimez espaces et sauts de ligne en fin de texte.
- Préférez un seul appel à l'action clair à un long message en plusieurs parties.
