Le GSM-7 est l'alphabet par défaut 7 bits défini dans GSM 03.38 (3GPP TS 23.038) pour le SMS. Il encode 128 caractères — lettres latines, chiffres, ponctuation et quelques caractères accentués et grecs — sur 7 bits chacun. Dix caractères supplémentaires figurent dans une table d'extension et coûtent chacun deux septets. Le texte tient en 160 caractères par SMS unique.
La table de base (128 caractères)
L'alphabet par défaut GSM-7 range 128 caractères sur 7 bits chacun. Il couvre l'alphabet latin majuscule, les chiffres, la ponctuation courante, un ensemble de voyelles latines accentuées, les signes de section et de devise, et plusieurs lettres grecques majuscules utilisées comme symboles. Chaque caractère ici coûte exactement un septet (7 bits).
| Groupe | Caractères |
|---|---|
| Majuscules latines | A B C D E F G H I J K L M N O P Q R S T U V W X Y Z |
| Minuscules latines | a b c d e f g h i j k l m n o p q r s t u v w x y z |
| Chiffres | 0 1 2 3 4 5 6 7 8 9 |
| Ponctuation | ! " # % & ' ( ) * + , - . / : ; < = > ? _ |
| Latin accentué | à ä å æ è é ì ñ ò ö ø ù ü Ä Å Æ Ç É Ñ Ö Ø Ü ß |
| Symboles grecs | Δ Φ Γ Λ Ω Π Ψ Σ Θ Ξ |
| Devise / symboles | £ $ ¥ ¤ € (ext) § ¡ ¿ @ |
| Espace blanc | SP (espace), CR, LF |
La table d'extension
Dix caractères ne figurent pas dans la table de base. On les atteint avec un préfixe d'échappement (0x1B) suivi du code du caractère dans la table d'extension, ce qui signifie que chacun coûte deux septets et non un. Inclure l'un d'eux dans un message réduit la capacité effective d'un SMS unique. Notez que le signe Euro (€) en fait partie.
| Caractère | Nom |
|---|---|
| | | Barre verticale |
| ^ | Caret / accent circonflexe |
| € | Symbole de l'euro |
| { | Accolade gauche |
| } | Accolade droite |
| [ | Crochet gauche |
| ] | Crochet droit |
| ~ | Tilde |
| \ | Antislash |
| FF | Saut de page |
Le packing 7 bits
Comme chaque caractère fait 7 bits mais que les octets en font 8, le GSM-7 tasse les septets à cheval sur les frontières d'octets. Huit caractères de 7 bits se rangent dans sept octets de 8 bits, si bien que 160 septets remplissent 140 octets — la limite de données utilisateur du SMS. Le packing décale les bits de chaque caractère successif pour combler les vides, ce qui explique qu'une vue naïve octet par octet d'un SMS GSM-7 paraisse brouillée.
8 characters (56 bits) ────► 7 octets (56 bits)
160 GSM-7 septets ────► 140 octets (the SMS payload limit)
(an extension char = 2 septets)Tables de bascule linguistiques
3GPP TS 23.038 définit aussi des tables de bascule linguistiques nationales (par exemple turc, espagnol, portugais) qui réaffectent certaines positions de la table d'extension à des lettres propres à la langue. Leur prise en charge est inégale selon les combinés et les réseaux, si bien que beaucoup d'expéditeurs évitent de s'y fier et se rabattent sur l'UCS-2 lorsqu'un message a besoin de caractères hors du jeu GSM-7 de base.
Questions fréquemment posées
Combien de caractères tiennent dans un SMS GSM-7 ?
160 caractères dans un SMS unique, car 160 septets de 7 bits chacun remplissent la limite de 140 octets de données utilisateur. Les messages GSM-7 concaténés tombent à 153 caractères par segment pour faire place au User Data Header.
Quels caractères comptent double en GSM-7 ?
Les dix caractères de la table d'extension — | ^ € { } [ ] ~ \ et le saut de page — coûtent chacun deux septets car ils nécessitent un préfixe d'échappement. En utiliser réduit la quantité de texte qui tient dans un SMS unique.
Le signe Euro est-il dans le GSM-7 ?
Oui, mais dans la table d'extension, donc il coûte deux septets plutôt qu'un. Un message contenant € tient donc moins de caractères avant de nécessiter un second segment.
Pourquoi un message GSM-7 paraît-il brouillé au niveau octet ?
Parce que le GSM-7 tasse des caractères de 7 bits à cheval sur les frontières d'octets de 8 bits. Huit caractères occupent sept octets ; lire la charge utile à raison d'un octet par caractère donne donc du charabia — il faut d'abord dépacketiser les septets.
Que se passe-t-il si mon texte contient un caractère absent du GSM-7 ?
Le message entier doit basculer en encodage UCS-2 (16 bits), ce qui fait passer la capacité d'un SMS unique de 160 à 70 caractères. Un seul caractère hors GSM-7 (un emoji, un guillemet courbe ou de nombreuses lettres non latines) force cette bascule.
Spécifications sources
Les normes publiées sur lesquelles repose cette page. S'ouvre dans un nouvel onglet.