Le schéma de codage des données (DCS) est un champ d'un octet — data_coding en SMPP, TP-DCS en GSM — qui indique au réseau comment le corps du message est encodé et, optionnellement, sa classe de message. Les trois valeurs qui comptent sont 0x00 (défaut GSM-7), 0x04 (binaire 8 bits) et 0x08 (UCS-2/Unicode). Les groupes de codage supérieurs ajoutent la classe de message et le comportement flash.
Les trois valeurs d'usage quotidien
Pour la quasi-totalité du trafic texte A2P, le DCS vaut l'une de trois valeurs. 0x00 sélectionne l'alphabet par défaut GSM-7. 0x04 sélectionne le binaire 8 bits (utilisé pour l'OTA, le WAP push et d'autres charges de données, pas le texte humain). 0x08 sélectionne l'UCS-2 pour l'Unicode. Une mauvaise valeur produit du mojibake et une segmentation erronée ; elle doit donc correspondre à la façon dont vous avez réellement encodé short_message.
| Valeur | Encodage | Utiliser |
|---|---|---|
| 0x00 | Alphabet par défaut GSM-7 | SMS en texte latin standard |
| 0x01 | IA5 / ASCII | Rarement utilisé |
| 0x03 | Latin-1 (ISO-8859-1) | Quelques routes d'Europe occidentale |
| 0x04 | Binaire 8 bits | Charges utiles binaires / OTA / WAP push |
| 0x08 | UCS-2 (UTF-16BE) | Unicode / non latin / emoji |
Les groupes de codage de GSM 03.38
L'octet DCS n'est pas une énumération plate — son quartet de poids fort sélectionne un groupe de codage qui réinterprète les bits de poids faible. Le groupe général de codage des données (0x0X) porte un indicateur d'alphabet (bits 3-2 : 00 = GSM-7, 01 = 8 bits, 10 = UCS-2) ainsi qu'un indicateur optionnel de compression et de classe. Le groupe codage/classe de message (0xFX) sert aux messages « flash » à affichage immédiat.
| Quartet de poids fort | Groupe | Signification des bits de poids faible |
|---|---|---|
| 0x0X | Codage général des données | Alphabet (GSM-7/8 bits/UCS-2), compression, indicateur de classe |
| 0x1X | Général, classe présente | Comme ci-dessus avec la classe de message en bits 1-0 |
| 0xCX | Message en attente — rejeter | Groupes de messagerie vocale/indicateurs |
| 0xDX / 0xEX | Message en attente — stocker | Groupes indicateurs GSM-7 / UCS-2 |
| 0xFX | Codage des données / classe de message | Alphabet au bit 2, classe dans les bits 1-0 (flash = classe 0) |
Classes de message
Lorsque le DCS indique une classe de message, les bits 1-0 sélectionnent où le message atterrit. La classe 0 est un SMS « flash » affiché immédiatement à l'écran sans être stocké. La classe 1 vise le combiné (ME), la classe 2 la SIM (SIM Toolkit / OTA), et la classe 3 un équipement terminal externe. La plupart des textes A2P ne portent pas de classe ; le flash (classe 0, par ex. DCS 0xF0 pour le GSM-7) sert aux alertes devant apparaître instantanément.
| Classe | Destination | Comportement |
|---|---|---|
| Class 0 | Écran | Flash — affichage immédiat, non enregistré automatiquement |
| Class 1 | Équipement mobile (ME) | Stocké dans la mémoire du terminal |
| Class 2 | SIM | SIM Toolkit / provisionnement OTA |
| Class 3 | Équipement terminal (TE) | Transmis à un équipement externe |
Questions fréquemment posées
Qu'est-ce que le schéma de codage des données dans le SMS ?
C'est un champ d'un octet (data_coding en SMPP, TP-DCS en GSM) qui indique au réseau comment le corps du message est encodé — GSM-7, 8 bits ou UCS-2 — et optionnellement sa classe de message. Il doit correspondre à l'encodage réel de la charge utile.
Quelle valeur de data_coding pour le GSM-7 vs l'Unicode ?
Utilisez 0x00 pour le texte en alphabet par défaut GSM-7 et 0x08 pour l'UCS-2 Unicode. N'utilisez 0x04 que pour les charges binaires 8 bits comme l'OTA ou le WAP push, jamais pour du texte lisible.
Qu'est-ce qu'un SMS flash ?
Un SMS flash est un message de classe 0 qui apparaît immédiatement à l'écran du destinataire sans être enregistré dans la boîte de réception. Il se règle via les bits de classe de message du DCS (par exemple 0xF0 pour un flash GSM-7).
Pourquoi mon message est-il arrivé en caractères illisibles ?
Presque toujours une incohérence de DCS : la valeur data_coding ne correspondait pas à l'encodage réel de short_message. Par exemple, envoyer des octets UTF-16 avec data_coding 0x00 (GSM-7) produit du mojibake. Réglez data_coding pour qu'il corresponde aux octets que vous envoyez.
Spécifications sources
Les normes publiées sur lesquelles repose cette page. S'ouvre dans un nouvel onglet.