# Encodage et segmentation des messages SMS : GSM-7, Unicode (UCS-2) et messages multiparties

> Un SMS contient 140 octets : 160 caractères GSM-7, ou seulement 70 en Unicode (UCS-2). L’encodage, l’UDH et la segmentation déterminent la limite de caractères et le coût de vos SMS.

- URL canonique: https://www.broadnet.me/fr/blog/sms-encoding-segmentation-gsm7-ucs2
- Langue: fr
- Dernière mise à jour: 2026-10-20
- Éditeur: BroadNet (https://www.broadnet.me)

- Publié le: 2026-08-03
- Auteur: BroadNet Editorial Team

La limite de caractères des SMS dépend entièrement de l'encodage. Chaque SMS contient une charge utile fixe de 140 octets. Ainsi, un message utilisant l'alphabet GSM-7 par défaut peut contenir 160 caractères, tandis qu'un message contenant un caractère non GSM-7 (un emoji, une lettre arabe, une apostrophe) passe en UCS-2 16 bits et ne peut contenir que 70 caractères. Les textes plus longs sont divisés en segments facturés séparément.

> Vous voulez les chiffres d'un message spécifique ? Collez-le dans le [calculateur de segments SMS](https://www.broadnet.me/tools/sms-segment-calculator) pour voir l'encodage, le nombre de segments et le budget de caractères, ou vérifiez exactement quels caractères forcent l'Unicode avec le [vérificateur GSM-7 / Unicode](https://www.broadnet.me/tools/gsm7-unicode-checker).

## Tout découle de 140 octets.

Le corps d'un SMS (appelé TP-User-Data par le 3GPP) est limité à 140 octets, soit 1 120 bits. Cette contrainte unique détermine le nombre de caractères affiché. Le nombre de caractères pouvant être envoyés est simplement égal à 1 120 divisé par le nombre de bits occupés par chaque caractère. La seule question pertinente est donc de savoir quel encodage votre texte déclenche. En pratique, deux encodages sont importants : GSM-7 et UCS-2.

## GSM-7 contre UCS-2 : deux façons de stocker les mêmes 140 octets

### GSM-7 : l’alphabet par défaut sur 7 bits

L'alphabet GSM-7 est l'alphabet SMS par défaut défini dans la norme 3GPP TS 23.038. Chaque caractère est encodé sur 7 bits, soit 160 caractères pour 1 120 bits, la limite classique d'un SMS. Sa table comprend les lettres latines, les chiffres, la ponctuation courante et quelques symboles. Un petit ensemble de caractères, appelé extension de jeu de caractères de base, coûte deux septets chacun, car il est encodé avec un octet d'échappement suivi du caractère. Ces caractères sont : ^ { } \ [ ] ~ | et le symbole euro (€). Un message complété par des symboles euro ne peut donc contenir que 80 caractères dans un SMS, et non 160.

Vous pouvez voir exactement quels caractères de votre texte sont dans l'alphabet, en extension ou hors de l'alphabet avec le [vérificateur GSM-7 / Unicode](https://www.broadnet.me/tools/gsm7-unicode-checker) avant d'envoyer.

### UCS-2 : Unicode 16 bits

Dès qu'un texte contient un seul caractère non pris en charge par le GSM-7, le message est entièrement réencodé en UCS-2, un encodage Unicode à largeur fixe de 16 bits. À raison de 16 bits par caractère, 1 120 bits ne permettent de stocker que 70 caractères. Il n'y a pas de conversion partielle ni de mélange : un seul caractère non pris en charge réduit de moitié le nombre de caractères disponibles, passant de 160 à 70. Il ne s'agit pas d'un bug : un SMS déclare un encodage pour l'ensemble de son contenu, l'expéditeur doit donc choisir celui qui peut représenter tous les caractères présents.

## Les limites de caractères, côte à côte

| Codage | Bits par caractère | SMS unique | Par segment (multipart) |
|---|---|---|---|
| GSM-7 (alphabet par défaut) | 7 | 160 | 153 |
| UCS-2 (Unicode 16 bits) | 16 | 70 | 67 |

Les valeurs par segment sont inférieures aux limites des messages individuels car un message concaténé utilise une partie de ses 140 octets pour un en-tête, que nous aborderons plus loin. Notez que les caractères d'extension mentionnés ci-dessus occupent également deux positions GSM-7 à l'intérieur d'un segment ; un segment contenant uniquement des crochets ou des symboles euro peut donc afficher bien moins de 153 caractères.

## Comment fonctionne le SMS multipartite (concaténé)

Les textes plus longs qu'un seul message ne sont pas tronqués : le SMSC émetteur les divise en segments, chacun constituant un SMS autonome, et le terminal récepteur les réassemble avant affichage. La coordination est assurée par un en-tête de données utilisateur (UDH) placé au début de chaque segment, conformément à la norme 3GPP TS 23.040. Pour une concaténation standard, l'UDH est codé sur 6 octets et contient un numéro de référence commun à tous les segments, le nombre total de segments et le numéro de séquence de chaque segment, permettant ainsi au terminal de les réassembler dans l'ordre.

```
UDH pour un SMS concaténé = 6 octets

05 00 03 RR TT SS

| | | | | |

| | | | | +- Numéro de séquence de cette partie (1..TT)

| | | | +---- Nombre total de parties (TT)

| | | +------- Numéro de référence (identique sur chaque partie)

| | +---------- Longueur de cet élément d'information = 3

| +------------- IEI = 00 (SMS concaténé, référence 8 bits)

+---------------- Longueur UDH = 05 (5 octets supplémentaires suivent)
```

Ces 6 octets sont extraits de la même charge utile de 140 octets, laissant 134 octets pour le texte. C'est pourquoi un message multipart contient 153 caractères GSM-7 par segment (l'en-tête est aligné sur sept octets, occupant sept des 160 positions) et 67 caractères UCS-2 par segment (134 octets ÷ 2). Certaines plateformes utilisent un UDH de 7 octets avec un numéro de référence de 16 bits, ce qui réduit ces valeurs à 152 et 66. Le calculateur de segments SMS (/tools/sms-segment-calculator) affiche la répartition exacte pour toute longueur de message.

## Pourquoi un simple emoji ou un seul caractère arabe change tout

C’est là que les expéditeurs sont surpris. Un seul caractère non GSM-7 force l’encodage du message entier en UCS-2. Ainsi, une notification en anglais de 150 caractères, qui tient normalement dans un seul segment, peut se retrouver discrètement limitée à 70 caractères (et divisée en trois segments) dès qu’un utilisateur y insère un emoji ou une citation typographique. Le nombre de caractères affiché reste inchangé ; seul l’encodage, lui, est modifié.

Pour les expéditeurs ciblant le marché arabophone, il ne s'agit pas d'un cas particulier, mais de la norme. L'alphabet arabe n'étant pas inclus dans l'alphabet GSM-7, chaque SMS en arabe est encodé en UCS-2 dès le premier caractère : 70 caractères pour un message unique, puis 67 par segment. Un message bilingue arabe-anglais ou un code OTP arabe personnalisé est rapidement segmenté. Les équipes envoyant des SMS dans les pays du Golfe, en Arabie saoudite, aux Émirats arabes unis et en Égypte doivent donc dimensionner leurs modèles de SMS en UCS-2 dès le départ, et non en GSM-7.

Caractères courants qui forcent silencieusement l'envoi d'un message entier vers UCS-2 :

- Les émojis de toute nature, y compris un simple 😀 à la fin d'un message marketing.
- Arabe, hébreu, cyrillique, grec, chinois et autres écritures non latines.
- Guillemets et apostrophes courbes (« ‘ “ ») collés depuis des traitements de texte.
- Les tirets demi-cadratins et cadratins (– —), les points de suspension (…) et l’espace insécable.
- De nombreuses lettres latines accentuées qui ne figurent pas dans la table GSM-7.

## Le coût de la segmentation

Chaque segment est facturé séparément. Une alerte GSM-7 de 160 caractères correspond à un SMS facturable ; ajoutez un caractère et elle se divise en deux segments (jusqu’à 306 caractères), facturés comme deux messages. Un code OTP arabe de seulement 75 caractères correspond déjà à deux segments UCS-2, et donc à deux messages, malgré sa brièveté apparente. Pour les codes OTP et les campagnes, le respect des règles d’encodage est un poste de facturation à part entière, et non un détail purement esthétique.

1. Conservez les modèles transactionnels dans un seul segment — 160 GSM-7 ou 70 UCS-2 — partout où le langage le permet.
2. Supprimer l'Unicode accidentel : normaliser les guillemets courbes, les tirets et les espaces insécables en leurs équivalents GSM-7 avant l'envoi.
3. Validez l'encodage et le nombre de segments au moment de la compilation, et non après la facturation, en utilisant un vérificateur dans votre pipeline d'envoi.
4. Budget Arabe et autres modèles non latins en unités UCS-2 (70 / 67) dès le départ.
5. Supprimez les éléments variables — URL, noms de commerçants longs — qui peuvent faire dépasser la limite d'un segment de message lors de l'exécution.

> L'API SMS de BroadNet (/products/sms-api) fournit l'encodage résolu et le nombre de segments pour chaque message avant son envoi et dans chaque accusé de réception. Vous pouvez ainsi visualiser et contrôler la segmentation en production plutôt que de la découvrir sur la facture. Vous trouverez tous les détails concernant les requêtes et les réponses dans la documentation pour développeurs (/developers).

## Foire aux questions

### Combien de caractères contient un SMS ?

Un SMS contient 140 octets de données. Avec l'alphabet GSM-7 par défaut, cela représente 160 caractères. Si le texte contient un caractère non GSM-7 (un emoji, une lettre accentuée ou arabe, une apostrophe), le message passe à l'encodage UCS-2 et contient 70 caractères. Les textes plus longs sont divisés en segments concaténés de 153 (GSM-7) ou 67 (UCS-2) caractères chacun.

### Pourquoi mon SMS n'est-il comptabilisé que comme 70 caractères ?

Un élément du texte ne faisant pas partie de l'alphabet GSM-7, le message a été entièrement réencodé en UCS-2 16 bits, limité à 70 caractères. Les causes les plus fréquentes sont les émojis, les caractères non latins, les guillemets courbes, les tirets ou les espaces insécables copiés-collés depuis un traitement de texte. Remplacez ou supprimez ce caractère pour que le message retrouve sa capacité de 160 caractères, conformément aux spécifications GSM-7.

### Qu'est-ce que l'encodage UCS-2 dans les SMS ?

UCS-2 est l'encodage Unicode à largeur fixe de 16 bits utilisé par les SMS lorsque le texte ne peut être représenté avec l'alphabet GSM-7 à 7 bits. Avec deux octets par caractère, la charge utile de 140 octets contient 70 caractères dans un message unique, ou 67 par segment dans un message multipartite. La présence de caractères arabes, d'émojis ou de tout autre caractère non GSM-7 dans le corps du message force l'encodage UCS-2 de l'intégralité du SMS.

### Pourquoi mon message s'est-il divisé en deux ?

Le texte dépassait la limite de caractères autorisée pour un seul message (160 caractères en GSM-7 ou 70 en UCS-2) et a donc été envoyé sous forme de message concaténé (multipart). Chaque segment contient un en-tête de données utilisateur de 6 octets pour le réassemblage, ce qui réduit la capacité à 153 caractères (GSM-7) ou 67 caractères (UCS-2) par segment. Chaque segment est facturé comme un message distinct.

## Références

- 3GPP TS 23.038 — Alphabets et informations spécifiques à la langue (alphabet par défaut GSM-7 et UCS-2) : [3gpp.org](https://www.3gpp.org/)
- 3GPP TS 23.040 — Réalisation technique du service de messagerie courte (SMS), y compris l'en-tête de données utilisateur : [3gpp.org](https://www.3gpp.org/)
- BroadNet — outils : [calculateur de segments SMS](https://www.broadnet.me/tools/sms-segment-calculator) et [vérificateur GSM-7 / Unicode](https://www.broadnet.me/tools/gsm7-unicode-checker).
