Cuatro formas de contar la misma cadena

Moyoutil calcula el recuento con espacios mediante [...s].length, que cuenta puntos de código. s.length de JavaScript cuenta unidades UTF-16. La secuencia tiene cuatro puntos de código de personas y tres uniones U+200D: siete en total. Su longitud UTF-16 es 11 y TextEncoder produce 25 bytes UTF-8.

const s = "👨‍👩‍👧‍👦";
[...s].length // 7
s.length // 11
new TextEncoder().encode(s).length // 25
Comparación de un grafema, siete puntos de código, once unidades UTF-16 y veinticinco bytes UTF-8
Diagrama de cálculos ejecutados. Las cifras usan unidades distintas; las áreas no representan proporciones. Muestra métodos de recuento, no un dibujo del emoji.

ECMAScript: String iterator · WHATWG: TextEncoder

Límites de texto y de entrada

Unicode UAX #29 describe límites de grafemas extendidos y reglas que evitan dividir secuencias emoji ZWJ. Intl.Segmenter con granularidad grapheme devuelve un segmento en este ejemplo. El límite de grafema no garantiza el dibujo real ni las reglas de todos los formularios.

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

Unicode UAX #29: Grapheme Cluster Boundaries

Moyoutil no ofrece recuentos separados de grafemas o UTF-16. Al pegar la secuencia en el contador verás 7 con espacios, 7 sin espacios y 25 bytes UTF-8. Comprueba si el límite corresponde a caracteres, bytes o UTF-16 y verifica en el formulario de destino. Eliminar uniones cambia la secuencia original.

Preguntas frecuentes

¿Todos los emoji cuentan como siete caracteres?

No. Este resultado es de la secuencia familiar concreta. Otros puntos de código producen otros recuentos. La cadena vacía tiene cero puntos de código, unidades UTF-16, bytes UTF-8 y grafemas.