En UTF-8, un caractère, plus précisément un point de code Unicode, occupe de 1 à 4 octets. Les lettres de a à z, les chiffres et la ponctuation ASCII prennent 1 octet, é, è, à, ç, œ et les guillemets « » en prennent 2, l’euro, l’apostrophe typographique ’ et l’espace fine insécable 3, et un emoji comme 😀 en prend 4. Un caractère visible peut toutefois réunir plusieurs points de code et occuper davantage.
Voilà pourquoi un texte en français compte souvent plus d’octets que de caractères. Les accents y sont pour quelque chose, mais les espaces insécables et l’apostrophe courbe, qu’on remarque à peine à l’écran, pèsent parfois plus lourd qu’une lettre accentuée.
Combien d’octets prend un caractère en UTF-8
En UTF-8, la taille d’un caractère dépend uniquement de la plage dans laquelle se trouve son point de code. La RFC 3629, qui définit UTF-8, en prévoit quatre. D’après ce texte (section 3, consulté le 29 octobre 2026), les points de code de U+0000 à U+007F tiennent sur 1 octet, ceux de U+0080 à U+07FF sur 2, ceux de U+0800 à U+FFFF sur 3, et ceux de U+10000 à U+10FFFF sur 4. La section 1 précise que les caractères US-ASCII sont encodés sur un seul octet, avec leur valeur ASCII habituelle.
| Plage de points de code | Octets en UTF-8 | Exemples en français |
|---|---|---|
| U+0000 à U+007F | 1 | lettres sans accent, chiffres, ponctuation simple, apostrophe droite ' |
| U+0080 à U+07FF | 2 | é, è, à, ç, œ, æ, « », espace insécable |
| U+0800 à U+FFFF | 3 | €, apostrophe typographique ’, espace fine insécable |
| U+10000 à U+10FFFF | 4 | de nombreux emojis à un seul point de code, comme 😀 |
Attention, cette règle vaut pour un point de code et non pour ce que tu vois à l’écran. Un symbole affiché peut réunir plusieurs points de code, si bien que certains emojis dépassent largement 4 octets. Nous y reviendrons plus bas.
Tableau des caractères français et de leur poids en octets
Voici la taille en UTF-8 des caractères que l’on rencontre le plus souvent dans un texte en français. Les valeurs ont été calculées le 29 octobre 2026 avec Node.js, à l’aide de Buffer.byteLength(s, 'utf8').
| Caractère | Point de code | Octets UTF-8 |
|---|---|---|
| e, Z, 7, ! | U+0065, U+005A, U+0037, U+0021 | 1 |
| ' (apostrophe droite) | U+0027 | 1 |
| é, è, à, ç | U+00E9, U+00E8, U+00E0, U+00E7 | 2 |
| œ, Œ, æ | U+0153, U+0152, U+00E6 | 2 |
| « » | U+00AB, U+00BB | 2 |
| espace insécable | U+00A0 | 2 |
| espace fine insécable | U+202F | 3 |
| ’ (apostrophe typographique) | U+2019 | 3 |
| € | U+20AC | 3 |
| 😀 | U+1F600 | 4 |
Deux lignes méritent un coup d’œil. La ligature œ est un seul point de code (U+0153) et ne pèse pas plus qu’un é. Quant aux deux espaces insécables, elles n’ont pas la même taille. L’espace insécable classique (U+00A0) fait 2 octets, l’espace fine insécable (U+202F) en fait 3, alors qu’à l’écran on les distingue à peine.
Espaces insécables et apostrophe courbe, le piège de la typographie française
Deux phrases identiques à l’œil nu peuvent différer de plusieurs octets selon les espaces et l’apostrophe qu’elles contiennent. Si ton texte place une espace fine insécable devant un point-virgule, des deux-points, un point d’exclamation ou un point d’interrogation, chacune de ces espaces pèse 3 octets, contre 1 pour une espace normale. Il en va de même pour l’apostrophe, avec 3 octets pour la courbe ’ et 1 pour la droite '.
Le tableau suivant compare quelques textes courts. Le nombre de caractères ne bouge pas, la taille si.
| Texte | Espaces et apostrophe utilisées | Caractères | Octets |
|---|---|---|---|
| Ça va ? | espaces normales | 7 | 8 |
| Ça va ? | espace fine insécable (U+202F) avant le ? | 7 | 10 |
| « Bonjour » | espaces normales à l’intérieur des guillemets | 11 | 13 |
| « Bonjour » | espaces insécables (U+00A0) à l’intérieur des guillemets | 11 | 15 |
| Bientôt l’été ! | apostrophe ’ et espace fine insécable avant le ! | 15 | 22 |
Pour comprendre d’où viennent les 22 octets de « Bientôt l’été ! », il suffit de classer ses 15 caractères selon leur poids.
| Poids | Caractères concernés | Nombre | Octets |
|---|---|---|---|
| 1 octet | B, i, e, n, t, t, l, t, l’espace normale entre les deux mots, ! | 10 | 10 |
| 2 octets | ô, é, é | 3 | 6 |
| 3 octets | ’, espace fine insécable | 2 | 6 |
| Total | 15 | 22 |
Les deux caractères les plus lourds de la phrase sont donc l’apostrophe et l’espace placée devant le point d’exclamation, et non les lettres accentuées. Or ils sont invisibles, ou presque. Si tu copies un texte depuis un traitement de texte, un PDF ou une page web, vérifie s’il en contient avant de conclure qu’il tiendra dans une limite.
Emojis composés, un seul symbole et beaucoup d’octets
Un emoji simple comme 😀 (U+1F600) pèse 4 octets, mais certains emojis réunissent plusieurs points de code et pèsent bien davantage. Les valeurs ci-dessous ont elles aussi été calculées avec Node.js le 29 octobre 2026.
| Emoji | Composition | Octets UTF-8 |
|---|---|---|
| 😀 | un seul point de code | 4 |
| 👍🏽 | pouce avec une teinte de peau, plusieurs points de code | 8 |
| 👨👩👧 | famille, plusieurs points de code assemblés | 18 |
| 🇫🇷 | deux indicateurs régionaux de 4 octets chacun | 8 |
Selon l’appareil et la police utilisés, la famille peut s’afficher comme un seul dessin, et elle pèse pourtant 18 octets. Un message court truffé d’emojis peut donc dépasser une limite en octets plus vite qu’un long paragraphe sans accent.
NFC et NFD, deux é identiques à l’écran mais pas en octets
Un é peut être enregistré comme un seul caractère (2 octets) ou comme un e suivi d’un accent combinant (1 + 2 = 3 octets). Les deux s’affichent pareil, mais n’ont pas la même taille.
Le rapport Unicode UAX #15 (consulté le 29 octobre 2026) explique que le caractère précomposé et la suite « lettre de base + signe combinant » sont canoniquement équivalents. Il définit deux formes de normalisation. La forme NFC compose, autrement dit elle regroupe la lettre et son accent en un seul point de code quand c’est possible. La forme NFD décompose, elle sépare la lettre de son accent.
Le mot « été » montre bien l’écart.
| Forme | Points de code | Caractères visibles | Octets |
|---|---|---|---|
| été en NFC | 3 | 3 | 5 |
| été en NFD (accents séparés) | 5 | 3 | 7 |
La différence a des conséquences concrètes. Deux chaînes qui se lisent de la même façon peuvent ne pas être égales pour un programme, et leur taille mesurée varie selon leur forme. Pour comparer des textes, ramène-les à la même forme de normalisation. Pour vérifier une limite, mesure plutôt le texte sous la forme exacte qui sera envoyée ou enregistrée, puis fais des essais avec des données réelles issues de tes propres sources.
Comment UTF-8 encode un caractère, bit par bit
UTF-8 range le numéro d’un caractère dans une suite de 1 à 4 octets dont les premiers bits indiquent la longueur. La RFC 3629 (section 3) en décrit le principe. Dans une suite d’un octet, le bit de poids fort vaut 0 et les 7 bits restants portent le numéro du caractère. Dans une suite de n octets, le premier octet commence par n bits à 1 suivis d’un 0, et chaque octet de continuation commence par 10 puis porte 6 bits.
| Numéro du caractère (hexadécimal) | Suite d’octets UTF-8 (binaire) |
|---|---|
| 0000 0000 à 0000 007F | 0xxxxxxx |
| 0000 0080 à 0000 07FF | 110xxxxx 10xxxxxx |
| 0000 0800 à 0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx |
| 0001 0000 à 0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx |
Les lignes du tableau s’excluent mutuellement, si bien qu’un caractère n’a qu’un seul encodage valide. La RFC précise aussi que les points de code de U+D800 à U+DFFF, réservés aux paires de substitution d’UTF-16, ne peuvent pas être encodés en UTF-8.
Encoder é pas à pas
- Le é correspond au point de code U+00E9, soit 11101001 en binaire.
- U+00E9 se situe entre U+0080 et U+07FF. On prend donc la deuxième ligne, avec le modèle 110xxxxx 10xxxxxx.
- On complète le numéro à gauche par des zéros pour remplir les cases x, puis on le découpe. Les 5 premiers bits, 00011, vont dans le premier octet et les 6 derniers, 101001, dans le second.
- On obtient 11000011 10101001, soit C3 A9 en hexadécimal. Le é pèse bien 2 octets.
Encoder € pas à pas
- Le signe € correspond au point de code U+20AC, soit 0010 0000 1010 1100 en binaire.
- U+20AC se situe entre U+0800 et U+FFFF. On prend donc la troisième ligne, avec le modèle 1110xxxx 10xxxxxx 10xxxxxx.
- On découpe les 16 bits en 0010, puis 000010, puis 101100.
- On obtient 11100010 10000010 10101100, soit E2 82 AC. Le € pèse 3 octets.
Ces deux résultats concordent avec les tailles calculées par Node.js dans le tableau plus haut.
Pourquoi la taille en octets compte pour les cookies, les bases de données et les API
Beaucoup de limites techniques s’expriment en octets, et un texte français peut les dépasser alors que son nombre de caractères semble raisonnable. Les cookies en sont un bon exemple. D’après la RFC 6265, section 6.1 (consultée le 29 octobre 2026), un navigateur devrait accepter au moins 4096 octets par cookie, nom, valeur et attributs compris. Il s’agit d’un minimum recommandé, pas d’une taille maximale garantie, et le calcul porte sur l’ensemble du cookie, pas seulement sur sa valeur.
Pour les colonnes d’une base de données, les champs d’un formulaire ou les paramètres d’une API, la limite peut être exprimée en octets ou en caractères selon le système. Or les deux ne se valent plus dès qu’un texte contient des accents, des guillemets français ou des emojis. Avant de fixer une longueur ou de valider une saisie, consulte la documentation de ton propre système pour savoir dans quelle unité il compte, puis fais un essai avec un texte réel qui contient ces caractères.
Erreurs fréquentes quand on mesure un texte en octets
Si la taille mesurée te surprend, vérifie ces cinq points.
- Confondre caractères et octets. Un texte de 15 caractères peut peser 22 octets, comme « Bientôt l’été ! » dans l’exemple plus haut. Une limite en octets se vérifie en octets.
- Oublier quelle base utilise l’outil. Le Calculateur de taille de texte divise par 1024 tout en affichant « KB », alors que le kilooctet du Système international vaut 1000 octets (1024 octets font un kibioctet, Kio), d’autres outils peuvent diviser par 1000. Compare toujours les valeurs exprimées en octets.
- Oublier les caractères invisibles. Un texte copié depuis un traitement de texte ou une page web peut contenir des espaces insécables (2 octets) ou des espaces fines insécables (3 octets) à la place d’espaces normales. Vérifie le texte tel qu’il sera réellement envoyé.
- Croire qu’un emoji fait toujours 4 octets. L’emoji 😀, oui, mais le drapeau 🇫🇷 en fait 8 et la séquence famille 👨👩👧 18. La taille dépend des points de code qui composent chaque emoji.
- Ignorer la normalisation. Un même mot peut peser 5 ou 7 octets selon qu’il est en NFC ou en NFD.
Mesurer un texte avec le Calculateur de taille de texte
Colle ton texte dans le champ Texte du Calculateur de taille de texte. Le résultat s’affiche aussitôt sous Taille, pendant que tu tapes. Le calcul se fait dans ton navigateur, le texte n’est pas envoyé à notre serveur.
Digily Link, le site qui propose cet outil, est notre produit. Le calculateur est accessible à tous et affiche la taille en octets (B), kilooctets (KB) ou mégaoctets (MB).
- Ouvre le Calculateur de taille de texte.
- Colle ou tape ton texte dans le champ Texte. Il n’y a aucun bouton à cliquer, le calcul se met à jour à chaque modification.
- Lis la valeur affichée sous Taille et compare-la à la limite de ton système, exprimée en octets.
Côté technique, le calcul repose sur new Blob([text]).size, qui renvoie la taille du texte encodé en UTF-8. L’outil mesure donc des octets, pas des caractères. Pour savoir si un texte copié contient des espaces insécables, colle-le dans le champ et compare le résultat aux valeurs des tableaux de cet article. Si les deux espaces de « Bonjour » entre guillemets sont des espaces insécables, tu devrais obtenir 15 octets. Si tu obtiens 13, ce sont des espaces normales.
KB dans le calculateur, 1024 octets et non 1000
Le calculateur divise par 1024. S’il affiche 1.5 KB, cela fait environ 1536 octets, car l’affichage est arrondi. Il écrit KB et non Kio, avec un point à la place de la virgule.
La division ne s’applique que lorsque la taille dépasse 1024 octets. Un texte d’exactement 1024 octets s’affiche donc « 1024 B », et il faut un octet de plus pour passer en KB. Le résultat est arrondi à deux décimales, et le même principe vaut pour MB et les unités suivantes.
D’autres outils ou logiciels peuvent compter un kilooctet comme 1000 octets. Si une documentation parle de « Ko » sans plus de précision, ou si tu compares deux outils entre eux, convertis tout en octets avant de conclure. Exprimée en octets, une taille ne prête à aucune confusion.
Avant d’envoyer un cookie, de remplir une colonne ou d’appeler une API, tu peux mesurer la taille de ton texte en octets avec le Calculateur de taille de texte, directement dans ton navigateur. Tu trouveras aussi d’autres outils texte dans la liste des outils Digily Link.