Text Statistics
TextCount characters, bytes, words, lines, sentences and paragraphs with multilingual-friendly word splitting.
- Characters
- Characters (no spaces)
- Bytes (UTF-8)
- Words
- Lines
- Sentences
- Paragraphs
- Reading time
On this page
What is a text statistics tool?#
A text statistics tool reads a block of text and tells you what is actually inside it: how many characters, how many words, how many sentences, how big it is in bytes, and roughly how long a reader will take to finish it. That sounds trivial until you hit a limit that bites you — a tweet that is one character over, a meta description that silently exceeds 160 bytes, an input field whose maxlength is measured in UTF-8 bytes rather than visible characters, or a draft whose “2 minute read” badge is silently wrong.
The catch is that “a word” is not a universal concept. English words are separated by spaces, but Chinese, Japanese and Thai are not — 你好世界 is four characters and four words, with no space in sight. A naive .split(' ') reports one “word” for that whole string. This tool counts per character for CJK ideographs, hiragana, katakana and Thai, and by whitespace-separated runs for Latin, Cyrillic, Greek, Devanagari and Hangul, so the word count is honest across scripts. Byte size uses real UTF-8 encoding (not string.length), which is what matters when a server or database column counts bytes.
Everything runs in your browser — there is no backend and nothing is uploaded.
How to use it#
- Type or paste your text into the input box on the left. The box accepts any script and preserves newlines.
- Click Sample to load a ready-made passage if you just want to see the numbers move, or Clear to empty the box.
- Read the right-hand panel. Eight rows update live as you type:
- Characters — total code-unit count, including spaces and newlines.
- Characters (no spaces) — same, minus every whitespace character.
- Bytes — UTF-8 byte length, the number a database
VARCHAR(n)or HTTP header limit actually sees. - Words — script-aware count (CJK/kana/Thai per character, everything else by space-separated runs).
- Lines — newline-separated rows.
- Sentences — split on terminators across scripts (
.!?plus the CJK。!?and Arabic؟۔). - Paragraphs — blocks separated by a blank line.
- Reading time — words divided by ~200 words per minute, rounded up to at least one minute.
Key features#
- Script-aware word counting. CJK ideographs, hiragana, katakana and Thai each count as one word per character; Latin, Cyrillic, Greek, Devanagari and Hangul count by space-separated runs. A mixed sentence gets a sensible total, not a broken one.
- Real UTF-8 byte size.
你好is 6 bytes, not 2 — the byte counter reflects what storage and transport actually cost. - Cross-script sentence splitting. Recognises CJK and Arabic terminators, so
今天天气很好。明天见。counts as two sentences, not one. - Live, no click needed. Numbers recompute on every keystroke; there is no Generate step to forget.
- Stays on your machine. Pasted text never leaves the page — no request, no log, no backend.
Worked example#
Paste the classic pangram:
The quick brown fox jumps over the lazy dog.
The panel reports:
- Characters: 44 (the period and 8 spaces are included)
- Characters (no spaces): 36
- Bytes: 44 (every character is ASCII, so bytes equal characters here)
- Words: 9
- Lines: 1
- Sentences: 1
- Paragraphs: 1
- Reading time: 1 minute (9 words is far under 200, but the counter floors to one minute so an empty “0 min” never shows)
Swap in the Chinese sentence 你好世界。 and the word count becomes 4 (one per Han character), while bytes jump to 13 — four 3-byte characters plus the 1-byte full stop. That gap between “4 characters” and “13 bytes” is exactly the kind of surprise this tool exists to surface before a form submission does.
FAQ#
Why is my byte count so much bigger than my character count?#
Because UTF-8 encodes non-ASCII characters with multiple bytes: one byte for the basic Latin range, two for Latin Extended (à, ñ, ç), three for most CJK ideographs and Indic scripts, and four for emoji and the astral plane. Forms and databases that enforce a byte budget see the larger number, so this tool reports bytes the same way.
The word count for my Chinese text feels high. Is that right?#
Probably. CJK scripts do not separate words with spaces, so a per-character count is the conventional, reproducible way to measure them — and it matches how most editors and word processors report CJK length. If you need linguistic word segmentation rather than character counting, the /en/text/word-frequency/ tool’s CJK mode uses the browser’s segmenter to split on actual word boundaries.
What reading speed does “reading time” assume?#
About 200 words per minute, a widely used average for adult silent reading of plain prose. It is a rough estimate — technical content, code, or a foreign language will be slower. The value is always rounded up to at least one minute so a short snippet does not show a meaningless “0 minutes”.
Does it count words in a code snippet the same way as prose?#
Yes — identifiers like getUserById are treated as one token because there is no space or punctuation inside them. If you want getUserById counted as three words, run it through the /en/text/transform/ tool’s case splitter first.