Why “word count” is not one universal operation
A basic counter trims text and splits on whitespace. That is convenient for simple English prose, but it is not a language-neutral definition of a word. Chinese and Japanese normally do not put spaces between every word. Thai word boundaries also require more than looking for spaces. English itself has ambiguous cases: contractions, hyphenated compounds, dotted abbreviations, URLs and numbers can be handled differently by different editors and submission systems.
This tool uses Intl.Segmenter with word granularity and keeps segments the browser marks as word-like. The selected locale gives the runtime a tailoring hint; “Auto” lets the browser negotiate its default. The Unicode text segmentation standard explains that reliable boundaries for languages such as Thai, Lao, Chinese and Japanese can require dictionary lookup or other mechanisms. A browser can therefore return a more useful result than a whitespace regular expression, but it still cannot remove every linguistic ambiguity.
Characters, graphemes, code points, code units and bytes
“Character count” is just as context-dependent. The large number at the top uses extended grapheme clusters: sequences that often match what a reader perceives as one visible character. A letter plus a combining accent can be one grapheme. A family emoji may contain multiple emoji code points joined by zero-width joiners but appear as one symbol. A flag is typically two regional-indicator code points displayed as one flag.
The details panel separates four measurements so you can use the correct one:
- Grapheme clusters: closest to user-perceived characters for editing and visible limits.
- Unicode code points: the abstract coded values obtained when iterating a JavaScript string by code point.
- UTF-16 code units: JavaScript’s native
String.length; some emoji require two units per code point. - UTF-8 bytes: encoded storage or transmission size, useful for payload and database limits.
These totals can all be different without any of them being “wrong.” A product field documented as 280 characters needs a precise rule: graphemes, code points, UTF-16 units or bytes. Test the exact downstream system when truncation, billing or validation depends on the number.
Sentence and paragraph boundaries
Sentence segmentation is locale-aware when the browser supports it. Punctuation is ambiguous: a period may end a sentence, appear inside a number or mark an abbreviation. The Unicode specification explicitly notes that plain text does not always contain enough information to decide perfectly. Treat the sentence total, average words per sentence and longest sentence as editing signals, not a grammar verdict.
A paragraph here is a non-empty block separated by at least one blank line. A line is any sequence separated by a line break, including visually wrapped text only when the source contains an actual newline. CSS wrapping does not create new logical lines. This rule is deterministic and visible, which is more useful than silently guessing whether every newline starts a paragraph.
Reading and speaking time are adjustable estimates
Reading speed changes with language, familiarity, typography, text difficulty, device and whether the reader is scanning or studying. Speaking speed changes with pauses, emphasis, names and audience. The calculator therefore exposes both speeds instead of presenting one universal research average as fact. The defaults—200 WPM for reading and 130 WPM for speech—are planning inputs, not measurements of a person.
For a script, time a representative rehearsal and replace the speaking WPM with observed performance. For learning material, use a lower reading WPM. For interface copy, reading time may be less useful than grapheme and line limits. The calculation is transparent: word total divided by selected words per minute.
Keyword density without SEO mythology
The frequency table is a descriptive text tool, not an instruction to repeat keywords. It normalizes terms with Unicode NFKC and locale-aware lowercase, then counts one-, two- or three-word sequences. Density is the term count divided by all generated terms of that size. It does not remove stop words because an English stop-word list would distort other languages and could hide meaningful phrases.
Use frequency to notice accidental repetition, compare drafts or inspect terminology consistency. Google does not publish a preferred keyword density, and forcing phrases into prose can make the page less useful. Search quality guidance instead asks whether content provides original, complete value and leaves the visitor with a satisfying result.
A repeatable word-limit workflow
- Select the locale that best matches the text or keep Auto for mixed content.
- Paste the entire final text, including headings and captions only if the receiving system includes them.
- Set the same minimum and maximum used by the application, assignment or publisher.
- Record the tool, locale and date when the number needs to be reproducible.
- Use the CSV export for aggregate metrics and term frequency. The export intentionally omits the source text.
- Recheck inside the final submission system because its counting rules remain authoritative.
Privacy and performance boundary
Text analysis, timing and CSV creation run locally. The page does not send text to an EasyTool endpoint, include it in query parameters or save it to local storage. Clipboard actions happen only when you press a copy button. Browser extensions, operating-system input services and the websites where you later paste text are outside this page’s privacy boundary.
The editor accepts up to one million UTF-16 code units. Segmentation needs memory proportional to the text and may be slower on older devices, so very large books or logs should be analyzed in stable sections. Adding section totals is valid for words, graphemes and bytes; unique-word and phrase-frequency totals must be recomputed over the combined token stream.
Standards and implementation references
- Unicode Standard Annex #29: Unicode Text Segmentation
- ECMA-402: ECMAScript Internationalization API and Intl.Segmenter
- MDN: JavaScript String.length and UTF-16 code units
- Google Search Central: helpful, reliable, people-first content
Editorial and implementation review: 2026-08-02. Unicode, CJK, emoji, combining-mark, newline, target, frequency, timing and CSV cases are covered by deterministic tests. Browser runtimes may update their Unicode and locale data, so segmentation results can evolve.
Frequently asked questions
What does “character” mean in this counter?
The main character total uses Unicode grapheme clusters, which approximate user-perceived characters. The details panel separately reports Unicode code points and JavaScript UTF-16 code units because those counts can differ for emoji and combining marks.
How are words counted in Chinese, Japanese and Thai?
When supported, the browser’s Intl.Segmenter applies locale-aware word boundaries and identifies word-like segments without requiring spaces. Results can still vary by browser data, selected locale and linguistic ambiguity.
How is reading time calculated?
Reading time is the word total divided by the adjustable reading speed. The default is 200 words per minute, but the tool does not claim one speed is correct for every reader, language or text type.
Does the tool upload or save my text?
No. Analysis and CSV generation run in the browser. The page does not add text to its URL, send it to an EasyTool API or save it in browser storage.
Why can two word counters disagree?
Counters may use whitespace, regular expressions, dictionaries or Unicode text segmentation. They can differ on hyphenation, apostrophes, URLs, emoji and scripts without spaces. Use the same tool and locale consistently when a limit matters.