Browser-local text utility

Character Counter

Count user-perceived characters in pasted or typed text, including emoji and combined Unicode sequences. Secondary totals show characters without Unicode whitespace, words, and normalized lines without creating a separate Word Counter page.

Enter text and choose an action.

Method and example

Characters use Intl.Segmenter grapheme boundaries when available. The fallback groups Unicode marks, variation selectors, skin-tone modifiers, regional-indicator flags, and zero-width-joiner sequences.

Worked example

The emoji 😀 counts as one character. A family emoji joined with zero-width joiners also counts as one in supported browsers. Empty input reports zero lines.

Behavior and limits

  • Characters without spaces removes all Unicode whitespace before grapheme counting.
  • Word count uses Intl.Segmenter word-like segments, with a Unicode letter/number fallback.
  • LF, CRLF, and CR are normalized consistently for line counting.
  • The fallback is intentionally lightweight and cannot promise perfect linguistic segmentation for every language.

Common mistakes

  • Using UTF-16 string length as visible character count
  • Removing only ASCII spaces
  • Counting an empty field as one line
  • Assuming every writing system defines words identically

Large-text handling

Character counting, case conversion, and reversal accept up to 5,000,000 UTF-16 code units and run only after an explicit action. Morse translation uses a lower 100,000-character text limit because encoded output can expand substantially.