Character Counter

Count characters, words, sentences, paragraphs, and bytes in text — with live update.

Counter Text & Encoding Updated Apr 19, 2026
How to Use
  1. Paste or type text into the input area.
  2. Counts update live as you type — characters (with and without spaces), words, sentences, paragraphs, lines, and bytes.
  3. Use the byte counter when working with character-limited fields (database columns, SMS messages, tweets).
  4. The "without spaces" character count is what most word-count tools (Word, Google Docs) call "characters not including spaces."
  5. Reading time is estimated at average reading speed (~200 words per minute).
  6. All counting runs in your browser — text is never transmitted.
Text
Counts

Metrics Explained

Characters (with spaces)
str.length
Total length of the string.
Characters (no spaces)
str.replace(/\s/g,'').length
Spaces and tabs excluded.
Words
str.trim().split(/\s+/).length
Whitespace-separated tokens.
Sentences
Split on . ! ?
Naive but matches Word/Docs.
Paragraphs
Blocks separated by blank lines
Two-newline separator.
Lines
Newline-separated
Each \n adds one.
Bytes
new TextEncoder().encode(str).length
UTF-8 byte length.
Reading time
words × 60 / 200 seconds
200 wpm is typical adult prose.
Speaking time
words × 60 / 130 seconds
130 wpm is conversational pace.

A Brief History of Word Counting

Word counting predates computers — newspapers paid per-word rates as early as the 19th century, and writers tracked their daily output by hand or with mechanical counters. The first electronic word counters appeared in 1960s mainframe text-processing systems and entered the personal-computing era with WordStar and WordPerfect in the late 1970s. Microsoft Word's word count became the de facto standard in the 1990s as Word displaced WordPerfect, and most modern word counts (including this one) are tuned to match Word's output.

Byte counting matters in computing for a different reason: text storage. ASCII (1963) used 7 bits per character, fitting English. ISO 8859 family (1980s) extended to 8 bits for Western European, Cyrillic, Greek, Hebrew, Arabic, etc. UTF-8 (1992, by Ken Thompson and Rob Pike) unified all of Unicode into a variable-length encoding where ASCII characters remain 1 byte but characters from any script can be represented with 1–4 bytes. UTF-8 is now overwhelmingly the dominant text encoding for the web, files, and APIs.

The "200 words per minute" reading-speed estimate comes from psychology research dating back to the early 20th century. Eye-tracking studies by Edmund Burke Huey (1908) and later researchers established it as the rough average for silent prose reading. Modern blog reading-time estimators (Medium, ghost.io, etc.) all converge on this 200 wpm figure with minor variations.

About This Counter

This counter computes every metric live as you type using JavaScript's native string methods and the standard TextEncoder for UTF-8 byte length. Word and sentence counts are designed to match Microsoft Word and Google Docs output for typical prose; some edge cases (footnote markers, em-dashes, multi-language mixing) may produce small differences.

Everything runs entirely in your browser; no text is transmitted, logged, or stored. You can safely paste drafts, code, or any sensitive content. The counter handles multi-megabyte text without issue; for very large documents, the counts update in real time as fast as your browser can lay out the textarea.

Frequently Asked Questions

What counts as a "word"?

A sequence of non-whitespace characters separated by whitespace. Hyphenated words ('re-enter') count as one word; words connected by slashes ('and/or') typically count as two. The counter uses a permissive split-on-whitespace rule, which matches what Microsoft Word and Google Docs report. For more nuanced linguistic counting, use a tokenizer.

Why does the byte count differ from character count?

ASCII characters take 1 byte each in UTF-8. Most accented Latin characters (é, ñ) take 2 bytes. Most CJK characters (中, あ, 한) take 3 bytes. Emoji and rare symbols take 4 bytes. So 100 characters of English text = 100 bytes, but 100 characters of Chinese text = 300 bytes. Database fields with byte limits (e.g., VARCHAR with byte length in MySQL) reject text whose byte count exceeds the limit even if the character count is well under.

How does this compare to Word's word count?

It matches Microsoft Word and Google Docs to within a word or two on typical prose. Edge cases (em-dashes, ellipses, footnote markers) can produce small differences. For high-stakes word counts (e.g., academic submission limits), confirm with the system that will actually grade you.

How is reading time calculated?

Word count × 60 / 200 = seconds, where 200 words/minute is the typical adult silent reading speed for general prose. Technical material is slower (around 100–150 wpm); fiction faster (300+ wpm). The 200-wpm baseline is what Medium, blog platforms, and most reading-time estimators use.

What's the difference between characters with and without spaces?

'With spaces' is the total length of the string. 'Without spaces' excludes spaces, tabs, and line breaks but keeps punctuation. SMS character limits include spaces; some tweet-style limits historically did not.

Are emoji counted as one character?

Most are, but compound emoji (skin-tone modifiers, family combinations) can take multiple Unicode code points joined with zero-width joiners. A single 👨‍👩‍👧‍👦 family emoji can be 7 code points. The counter uses Array.from(string) which splits on grapheme clusters approximately, so simple emoji count as 1 — composite emoji may count as more depending on browser support.

Common Use Cases

Tweet and social media drafting

Fit a post under the 280-character X/Twitter limit, the LinkedIn 3,000-character limit, or any other platform-specific cap.

Academic essay writing

Hit a 500–1,000 word target for an assignment without going over.

SEO meta descriptions

Keep meta descriptions under the ~155-character limit Google displays in search results.

Database column sizing

Verify a customer-facing string fits within a VARCHAR(255) column when it contains non-ASCII characters.

Translation and copywriting

Confirm a translated string fits the original byte budget for UI labels, error messages, or print layout.

Reading time estimation

Display "estimated 4 min read" labels on blog posts and articles based on actual content length.

Last updated: