Compter les caractères : SMS, X, titres YouTube et emoji
« Combien de caractères fait ce texte ? » a plusieurs réponses, car chaque système compte autre chose : ce que l’on voit, les points de code derrière, ou les octets nécessaires pour l’envoyer. Une main qui salue 👋 fait un caractère à l’écran et deux pour JavaScript ; un SMS contenant une seule lettre accentuée accepte 70 caractères au lieu de 160. Ce guide explique les règles d’où viennent ces chiffres.
Ce qu’est un « caractère »
Ce que l’on voit comme un caractère, un graphème, peut regrouper plusieurs points de code Unicode, et chaque point de code une ou deux unités UTF-16. La propriété length de JavaScript compte les unités, donc 👋 a une longueur de 2. L’emoji famille 👨👩👧 est un graphème fait de cinq points de code (homme, liaison, femme, liaison, fille) et de huit unités. Même « café » peut compter quatre ou cinq points de code, l’accent étant stocké à part ; la plupart des systèmes le normalisent à quatre.
Un bon compteur compte les graphèmes, ce que voit le lecteur. Découper le texte en points de code ou utiliser Intl.Segmenter, comme l’explique MDN, y parvient ; length seul, non.
SMS : 160, 70, 153 et 67
Un SMS transporte au plus 140 octets de texte. Avec l’alphabet GSM, 7 bits par caractère, cela fait 160 caractères ; dès qu’un caractère n’en fait pas partie, tout le message passe en UCS-2, 2 octets par caractère, et en contient 70. Quelques caractères GSM prennent deux places car ils exigent un échappement : € [ ] { } ^ ~ \ |.
Les textes plus longs partent en plusieurs parties, et chacune consacre 6 octets à un en-tête qui indique au téléphone comment les assembler, ce qui laisse 153 caractères GSM ou 67 caractères UCS-2 par partie.
| Message | Tient dans un SMS | Par partie s’il est découpé |
|---|---|---|
| Uniquement des caractères GSM | 160 | 153 |
| Au moins un autre caractère (un emoji, ó, ã, ê) | 70 | 67 |
Ainsi, 161 caractères GSM demandent 2 parties et 307 en demandent 3 ; avec un emoji, 71 caractères en demandent déjà 2. Les accents sont le piège habituel : à, è, é, ì, ò et ù font partie de l’alphabet GSM, mais â, ê, ô et ç minuscule non, si bien que « fête » fait passer le message à 70.
Limites sur X, YouTube et Google
| Où | Limite | Comment on compte |
|---|---|---|
| Post sur X | 280 | Alphabets latin, grec, cyrillique, arabe et la plupart des autres 1 ; chinois, japonais et coréen 2 ; chaque emoji 2, même une famille ; chaque lien 23 |
| Titre d’une vidéo YouTube | 100 | Caractères |
| Description YouTube | 5 000 | Caractères |
| Méta-description pour Google | Aucune limite | Google coupe l’extrait pour qu’il tienne à l’écran et en rédige souvent un lui-même à partir de la page |
Sur X, un post en alphabet latin peut utiliser les 280 caractères, mais un post en japonais seulement 140, et un lien coûte toujours 23, quelle que soit sa longueur.
Pourquoi deux compteurs donnent des chiffres différents
- L’un compte les graphèmes, l’autre les unités UTF-16 : chaque emoji et certaines lettres rares font la différence.
- Espaces et retours à la ligne : certains outils les ignorent, et un retour à la ligne Windows compte pour deux caractères.
- Normalisation : un accent stocké comme marque séparée ajoute un point de code tant que le texte n’est pas normalisé.
- Règles des plateformes : X pondère les caractères et les liens, le SMS compte des octets, un champ de titre compte des caractères.
Questions fréquentes
Pourquoi mon SMS est-il passé à 70 caractères ?
Parce qu’il contient un caractère absent de l’alphabet GSM : un emoji, des guillemets typographiques ou un accent comme celui de ê. Tout le message est alors envoyé en UCS-2, qui contient 70 caractères, ou 67 par partie.
Pourquoi € compte-t-il pour deux dans un SMS ?
Il figure dans la table d’extension GSM, atteinte par un caractère d’échappement : il occupe donc deux des 160 places. C’est pareil pour [ ] { } ^ ~ \ et |.
Les espaces comptent-ils ?
Dans un SMS, un post sur X et un titre YouTube, oui : une espace est un caractère comme un autre. Le compteur de caractères affiche le total avec et sans elles.
Quelle longueur pour une méta-description ?
Google ne fixe aucune limite, coupe l’extrait pour qu’il tienne à l’écran et en rédige souvent un lui-même à partir de la page. Placez les mots importants en premier pour qu’ils échappent à la coupe.
Pourquoi JavaScript indique-t-il 2 pour un seul emoji ?
Parce que length compte les unités UTF-16, et la plupart des emoji en occupent deux. Comptez plutôt les graphèmes, par exemple avec Intl.Segmenter, et 👋 vaut 1.
Références
- 3GPP TS 23.040 — Technical realization of the Short Message Service (SMS)
- 3GPP TS 23.038 — Alphabets and language-specific information
- X Developer Platform — Counting characters
- YouTube Help — Edit video settings
- Google Search Central — Control your snippets in search results
- MDN Web Docs — String: length
Guides associés
- Les adresses IP expliquées : IPv4, IPv6 et les plages réservées
- Les sous-réseaux et le CIDR expliqués : préfixes, masques et hôtes utilisables
- Les enregistrements DNS expliqués : A, AAAA, CNAME, MX, TXT et NS
- Un site est-il en panne, ou est-ce chez vous ? Comment vérifier, étape par étape
- Codes de statut HTTP et erreurs Cloudflare : ce que signifient 403, 404, 429, 500, 503 et 521
- Les timestamps Unix et les fuseaux horaires expliqués
- Compter les dates : jours entre deux dates, années bissextiles et semaines ISO
- Fuseaux horaires et heure d’été : réunions entre villes
- Les formats d’image expliqués : JPEG, PNG, WebP, AVIF et HEIC
- La taille d’une image expliquée : pixels, DPI, poids et qualité
- Les photos de téléphone expliquées : HEIC, métadonnées EXIF et vie privée
- La robustesse des mots de passe expliquée : longueur, entropie et phrases de passe
- Le hachage expliqué : SHA-256, sommes de contrôle et mots de passe
- Les JSON Web Tokens expliqués : revendications, signatures, validation sûre
- Les clés API expliquées : longueur, format, stockage et rotation
- Les UUID expliqués : v4, v7 et comment choisir la bonne version
- Les QR codes expliqués : capacité, correction d’erreurs et taille d’impression
- Les pourcentages et la TVA expliqués : ajouter, retirer et cumuler
- Erreurs JSON courantes et comment les corriger
- Les fichiers CSV expliqués : séparateurs, guillemets, encodage et Excel
- Les encodages de texte expliqués : UTF-8, Base64 et encodage d’URL
- Expressions régulières : classes, quantificateurs et groupes
- Mo ou Mio, Mbit/s ou Mo/s : tailles de fichiers et débits
- Expressions cron : champs, pas et fuseaux horaires
- Paramètres UTM : étiqueter des liens pour l’analyse d’audience
- Seuil de rentabilité, marge et ROAS : les chiffres d’une petite entreprise
- Tarifs freelance expliqués : taux horaire, TJM et heures facturables
- RPM et CPM YouTube expliqués : ce que gagne vraiment un créateur
- Le contraste des couleurs expliqué : ratios WCAG, texte lisible et formats de couleur
- Modifier des PDF dans le navigateur : ce que la fusion, la division et la conversion conservent