Aller au contenu

Compter les caractères

Avec et sans espaces, plus le nombre d'octets que votre base de données et votre passerelle SMS mesurent réellement. Ici, un emoji compte pour un caractère, parce que c'est ce qu'il est.

  • Jamais conservé
  • Pas de file d'attente, pas d'attente
  • Sans inscription, sans filigrane

0

Caractères

ce que voit un lecteur

0

Sans espaces

espaces exclues

0

Mots

toutes langues

0

Octets UTF-8

ce que compte une base de données

Tous les comptages, et à quoi ils servent
LignesNumérotées comme dans un éditeur
0
PhrasesPas coupées par « M. » ou « etc. »
0
ParagraphesBlocs séparés par une ligne vide
0
Points de codeCe que capture le « . » d'une expression régulière
0
Unités UTF-16Ce que renvoie string.length en JavaScript
0
Octets UTF-8Ce que mesurent une limite VARCHAR et les en-têtes HTTP
0
Temps de lectureEn silence, à 238 mots par minute
—
Temps de paroleÀ voix haute, à 150 mots par minute
—
Mot le plus longEn caractères, pas en octets
—
Mot moyenUn indicateur approximatif de lisibilité
—

Commencez à taper et tout se remplit. Essayez un emoji ou une phrase en chinois — les deux sont comptés comme le ferait une personne, ce que la plupart des compteurs font mal.

Comment ça marche

1

Collez ou tapez

Le compte se met à jour au fil de la saisie. Rien n'est conservé.

2

Choisissez le compte qu'il vous faut

Caractères, caractères sans espaces, points de code ou octets UTF-8 — chacun est affiché, avec ce qui l'utilise.

3

Surveillez votre limite

Titres SEO, meta descriptions, segments SMS et champ de 255 octets sont tous comparés à ce que vous avez écrit.

Quatre chiffres, parce que « caractère » a quatre sens

Prenez l'emoji d'une famille, ou un pouce levé avec une couleur de peau. Une personne voit un caractère. Il est construit à partir de plusieurs points de code reliés par des liaisons invisibles : une expression régulière en voit donc sept. JavaScript stocke le texte en unités de 16 bits, et tout ce qui sort de la plage de base en occupe deux : il en annonce donc onze. Encodé en UTF-8 pour une colonne de base de données, il occupe vingt-cinq octets. Aucun de ces chiffres n'est faux et aucun n'est la réponse — le bon dépend entièrement de ce qui impose la limite.

La question pratique est donc : qui a fixé la limite ? Une colonne de base de données déclarée en VARCHAR compte les octets dans la plupart des moteurs, c'est pourquoi un champ qui accepte 255 caractères anglais en refuse beaucoup moins en japonais. Un SMS fait 160 caractères dans son propre alphabet à sept bits, et tombe à 70 par message dès qu'un seul caractère en sort — un guillemet courbe ou un emoji peut transformer un message en trois. Un validateur de formulaire en JavaScript compte presque toujours les unités UTF-16, c'est pourquoi un champ qui annonce 280 caractères peut refuser une chaîne apparemment plus courte, remplie d'emoji.

Le compte de ce que voit un lecteur est le plus difficile, et il est obtenu grâce à la segmentation de texte du navigateur lui-même — le même mécanisme qui décide où va votre curseur quand vous appuyez sur la flèche gauche. C'est la bonne définition d'« un caractère » pour tout ce qu'une personne perçoit, et elle gère les cas qui piègent les comptages plus simples : une lettre accentuée écrite comme une lettre de base suivie d'un signe combinant compte pour un, et les groupes de caractères en hindi et en thaï sont comptés comme le ferait un lecteur de ces écritures.

Pour de la prose anglaise ordinaire, les quatre chiffres sont identiques, c'est pourquoi le problème reste invisible jusqu'au jour où il ne l'est plus. Ils divergent sur les emoji, les caractères accentués et combinants, les écritures non latines et les symboles mathématiques — et ce sont exactement les saisies qui font qu'un champ est tronqué en silence dans une base de données trois mois après sa création.

Si vous cherchez autre chose

Dans le code, utilisez une fonction qui compte ce dont vous avez besoin plutôt que la longueur par défaut. Intl.Segmenter en JavaScript compte ce que voit un lecteur ; les chaînes Python 3 comptent les points de code et len(s.encode("utf-8")) compte les octets ; PHP propose mb_strlen face à strlen précisément pour cette distinction. Dans la plupart des langages, la valeur par défaut est celle qui arrangeait le langage, et c'est rarement celle que votre limite désigne.

Quand c'est un champ de base de données qui impose la contrainte, la solution durable se trouve en amont. Déclarer une colonne en utf8mb4 dans MySQL, ou en text dans PostgreSQL, supprime toute une catégorie de bugs de troncature — l'ancien utf8 de MySQL est notoirement limité à trois octets par caractère et ne peut pas stocker le moindre emoji. Compter soigneusement dans le formulaire n'est qu'un palliatif pour une colonne qui aurait dû être déclarée autrement.

Questions fréquentes

Mon texte est-il conservé quelque part ?

Non. Rien n'est conservé et aucune requête n'est envoyée, et l'outil continue de fonctionner réseau déconnecté. Pour du texte, c'est plus important qu'il n'y paraît : ce que l'on colle dans un compteur en ligne, ce sont des écrits non publiés, des projets d'actes juridiques, des travaux d'étudiants et des documents internes.

Pourquoi y a-t-il quatre comptes de caractères différents ?

Parce qu'un « caractère » a quatre sens différents et que la plupart des outils n'en connaissent qu'un. Ce que VOUS voyez comme un caractère est un graphème — « é », « 🎉 » et même « 👨‍👩‍👧‍👦 » en font chacun un. Ce que renvoie string.length en JavaScript, ce sont des unités de code UTF-16, et l'emoji famille en compte 11. Ce que capture une expression régulière, ce sont des points de code, et il en compte 7. Et ce que mesure une colonne de base de données ou un en-tête HTTP, ce sont des OCTETS UTF-8, et il en compte 25. Les quatre sont affichés ici, parce que celui qu'il vous faut dépend de qui impose la limite.

Combien de caractères compte un emoji ?

Un seul, ici — parce que c'est ce qu'il représente pour la personne qui lit, et c'est ce que compte la limite de caractères d'une plateforme moderne. Ailleurs, ce peut être 2, 7 ou 11 : « 👨‍👩‍👧‍👦 » est composé de quatre personnes reliées par trois caractères de liaison invisibles, soit 7 points de code et 11 des unités que compte string.length en JavaScript. Si un formulaire a refusé votre texte parce qu'il était trop long alors qu'il paraissait assez court, c'est généralement la raison, et le nombre d'octets de cette page vous montrera sa taille réelle.

Pourquoi mon texte de 200 caractères ne passe-t-il pas dans un champ de base de données de 255 caractères ?

Parce que le champ limite presque certainement des OCTETS, pas des caractères. En UTF-8, les lettres anglaises simples prennent un octet chacune, mais les lettres accentuées en prennent deux, et le chinois, le japonais, l'arabe et les emoji trois ou quatre. 200 caractères de japonais font donc 600 octets. Le nombre d'octets est affiché ici précisément pour cette raison — c'est le chiffre que votre base de données vérifie réellement.

Pourquoi un seul emoji fait-il passer ma limite SMS de 160 à 70 ?

Parce qu'un SMS utilise un alphabet compact à 7 bits qui contient 160 caractères — et cet alphabet n'a ni emoji, ni guillemets courbes, et presque aucun accent. Un seul caractère qui en sort fait basculer TOUT le message en Unicode, et la limite tombe à 70. Une apostrophe courbe collée depuis Word y suffit aussi bien qu'un emoji. C'est ainsi qu'un message court est facturé comme trois, et la page vous le signale dès que cela arrive.

Compte-t-il les espaces ?

Les deux chiffres sont affichés en même temps, vous n'avez donc pas à choisir. Les retours à la ligne et les tabulations comptent aussi comme des espaces.

Bon à savoir : Quatre chiffres, parce que « caractère » a quatre sens et que celui qu'il vous faut dépend de qui impose la limite. Un VARCHAR de base de données compte les octets UTF-8, une expression régulière compte les points de code, JavaScript compte les unités UTF-16, et une personne compte ce qu'elle voit. C'est sur les emoji qu'ils divergent le plus.

Intégrez cet outil à votre site

Gratuit pour tout blog, page de cours ou article d'aide. Collez un seul extrait de code et vos visiteurs pourront l'utiliser directement sur votre page.