Word Counter
Compare rich text statistics, estimate pages at 250 or 500 words per page, and track progress in words, pages or characters. Text stays in this page without upload or persistent storage.
A QUICK WALKTHROUGH
How to use this tool
- Enter up to 100,000 UTF-16 code units; empty input is allowed.
- Choose words, pages or characters for optional progress targets, with 250 or 500 words per page.
- Compare code points with UTF-16 units, review text structure and time assumptions, then copy the summary.
Whitespace tokens, not linguistic words
Each non-empty run separated by JavaScript Unicode whitespace is one word/token. Punctuation stays attached. This is not semantic segmentation for Chinese, Japanese or Korean, or dictionary-based tokenization.
Distinct character and structure counts
UTF-16 totals use source.length; non-whitespace totals use the length after removing JavaScript whitespace. Unicode code points are counted separately. Displayed graphemes use Intl.Segmenter with a code-point fallback, and UTF-8 size uses TextEncoder. LF, CRLF and CR separate lines; an empty line has length zero, while a paragraph is a non-empty block separated by blank lines. Sentence estimates split on ., !, ?, and ….
Stated time and privacy limits
Reading minutes = ceil(tokens / 100) / 2: 200 tokens/min rounded up to 0.5 min, with empty text at 0. Speaking retains a rough 130 tokens/min estimate: under 1 min for 1–129 tokens, otherwise whole minutes rounded up. These are planning assumptions, not scientific measurements. Input is limited to 100,000 UTF-16 units, processed only in this page and never uploaded or persistently stored.
GOOD TO KNOW
Common questions
Why do UTF-16 and code-point counts differ?
A supplementary character such as 😀 uses two UTF-16 units but one Unicode code point. Joined emoji and combining marks can also make displayed graphemes differ from code points.
Is this a Chinese, Japanese or Korean word count?
It counts whitespace-separated tokens. Unspaced text remains one token; it does not detect semantic words in those languages.
How are reading minutes rounded?
At the assumed 200 tokens/min rate, minutes round upward to the next 0.5 minute. Empty or whitespace-only text gives 0 minutes. This is a formula, not measured reading speed.
What happens on invalid input?
Old output is cleared. Text over 100,000 UTF-16 units, invalid token goals, or a minimum greater than the maximum produce a local error. Failed copying selects the summary for manual copying.