The word character is ambiguous in Unicode text. A reader often sees one grapheme cluster, a protocol may count code points or UTF-8 bytes, and JavaScript exposes UTF-16 code units. WordCount shows all four instead of hiding that choice.

Graphemes follow visible text

A base letter plus a combining accent can be two code points but one grapheme. A family emoji joins several emoji with zero-width joiners and is normally one grapheme. Locale-aware grapheme segmentation is the best count for cursor movement and many human-facing limits, but the receiving application may still use another rule.

Code points identify Unicode values

Unicode string iteration counts code points, not what a reader necessarily perceives. Variation selectors, skin-tone modifiers and joiners are code points even when they help render one visible cluster. Code-point counts are useful for protocol analysis only when that protocol explicitly names them.

JavaScript length counts UTF-16 units

Most common letters need one UTF-16 unit, while a code point outside the basic multilingual plane needs a surrogate pair and therefore two. String length is exact for JavaScript storage semantics, but calling it a visible character count causes surprising results for emoji.