Quatro formas de contar a mesma string
Moyoutil calcula a contagem com espaços usando [...s].length, que conta pontos de código. s.length do JavaScript conta unidades UTF-16. A sequência tem quatro pontos de código de pessoas e três junções U+200D: sete no total. O comprimento UTF-16 é 11 e TextEncoder produz 25 bytes UTF-8.
const s = "👨👩👧👦";
[...s].length // 7
s.length // 11
new TextEncoder().encode(s).length // 25Limites do texto e da entrada
Unicode UAX #29 descreve limites de grafemas estendidos e regras que não dividem sequências emoji ZWJ. Intl.Segmenter com granularidade grapheme retorna um segmento neste exemplo. Um limite de grafema não garante a aparência nem as regras de todos os formulários.
const segmenter = new Intl.Segmenter("en", {
granularity: "grapheme"
});
[...segmenter.segment(s)].length // 1Unicode UAX #29: Grapheme Cluster Boundaries
Moyoutil não mostra contagens separadas de grafemas ou UTF-16. Cole a sequência no contador para verificar 7 com espaços, 7 sem espaços e 25 bytes UTF-8. Confira se o limite é de caracteres, bytes ou UTF-16 e verifique no destino. Remover junções muda a sequência original.
Perguntas frequentes
Todo emoji conta como sete caracteres?
Não. Este é o resultado da sequência familiar específica. Outros pontos de código produzem outras contagens. Uma string vazia tem zero pontos de código, unidades UTF-16, bytes UTF-8 e grafemas.