Compter la même chaîne de quatre façons

Moyoutil utilise [...s].length pour le nombre avec espaces : cela compte les points de code. s.length en JavaScript compte les unités UTF-16. La séquence contient quatre points de code de personnes et trois jonctions U+200D, soit sept. La longueur UTF-16 est 11 et TextEncoder produit 25 octets UTF-8.

const s = "👨‍👩‍👧‍👦";
[...s].length // 7
s.length // 11
new TextEncoder().encode(s).length // 25
Comparaison d’un graphème, sept points de code, onze unités UTF-16 et vingt-cinq octets UTF-8
Schéma de calculs exécutés. Les nombres utilisent des unités différentes ; les surfaces ne représentent pas des rapports numériques. Il montre les méthodes de comptage, pas le dessin de l’emoji.

ECMAScript: String iterator · WHATWG: TextEncoder

Frontières du texte et limites de saisie

Unicode UAX #29 décrit les frontières des graphèmes étendus et les règles évitant de séparer les séquences emoji ZWJ. Intl.Segmenter avec grapheme donne un segment pour cet exemple. Une frontière de graphème ne garantit ni le rendu ni les règles de chaque formulaire.

const segmenter = new Intl.Segmenter("en", {
  granularity: "grapheme"
});
[...segmenter.segment(s)].length // 1

Unicode UAX #29: Grapheme Cluster Boundaries

Moyoutil n’affiche pas de nombres séparés de graphèmes ou d’unités UTF-16. Collez la séquence dans le compteur : 7 avec espaces, 7 sans espaces et 25 octets UTF-8. Vérifiez si la limite porte sur caractères, octets ou UTF-16, puis contrôlez dans le formulaire destinataire. Supprimer les jonctions modifie la séquence.

Questions fréquemment posées

Chaque emoji compte-t-il pour sept caractères ?

Non. Ce résultat concerne cette séquence familiale précise. D’autres points de code donnent d’autres nombres. Une chaîne vide a zéro point de code, unité UTF-16, octet UTF-8 et graphème.