Character Counter
Count characters, words, sentences, paragraphs, and reading time
0
Characters
0
Without spaces
0
Words
0
Sentences
0
Paragraphs
1
Lines
–
Reading time
–
Speaking time
What is a character counter?
A character counter is a small but surprisingly nuanced tool: it answers the question "how long is this text?" against several legitimate definitions of "long". This counter gives you an instant breakdown of any text — total characters, characters without whitespace, word count, sentence count, paragraph count, line count, and estimated reading and speaking time. All counts update live as you type or paste, and everything runs in the browser, so the text you measure never leaves your device.
The reason a character count needs more than one number is that "character" is itself ambiguous. The string "naïve" contains five letters to a human reader, but it can be encoded as five Unicode codepoints (with the precomposed ï) or six (with a combining diaeresis), and as five UTF-16 code units (what JavaScript reports for .length) or seven UTF-8 bytes. Emojis make the gap larger: a single 👨👩👧 takes one grapheme to a reader, four codepoints joined by zero-width joiners, eight UTF-16 code units, and eleven UTF-8 bytes. This counter reports the number a human would normally mean — graphemes — alongside word and sentence counts useful for writers and SEO.
Common uses include checking platform character limits (X / Twitter posts, SMS, meta descriptions, page titles), verifying word counts for essays, articles, and academic work, estimating how long a speech or presentation will take to deliver, and confirming that pasted-in copy fits the constraints of a particular form, exporter, or content management system. Reading time here is calculated at 238 words per minute — the average adult silent-reading rate established by Brysbaert (2019) — and speaking time at 150 words per minute, which is the typical comfortable pace for presentations and audiobook narration.
What each count actually means
Different counts answer different questions, and the right one depends on why you are measuring. The breakdown below explains each metric, the rules used to compute it, and the situations where it is the count you should care about.
Characters
Hello, 世界! 👋
The total grapheme count — the number of characters a human would read. Spaces, punctuation, and emoji each count as one. Combining marks (accents, diacritics) merge into the base character, so é is one character whether stored as a single codepoint or as e plus a combining acute. The example above is 11 characters.
Characters without spaces
Hello,世界!👋
Same count as above, minus all whitespace (spaces, tabs, newlines). Useful when a system measures content density rather than typed length — for example, exam essay limits that exclude whitespace, or pricing models that bill by non-whitespace characters.
Words
don't go-home
Whitespace-delimited tokens. Apostrophes and hyphens within a token do not split it, so don't is one word and go-home is one word. Numbers count as words. Empty input is zero words. The same definition is used by most word processors and reading-time calculators; some style guides count compound words separately, but doing so introduces edge cases without much benefit.
Sentences
See? Two!
Runs of text terminated by ., !, or ?. Trailing punctuation does not start a new sentence. Abbreviations like "Dr." and "e.g." can produce false positives in any sentence-splitting heuristic — this counter does not special-case them, so technical or abbreviation-heavy text may slightly overcount.
Paragraphs
\n\n separated
Runs of text separated by one or more blank lines (a newline followed by another newline). A single line break inside a block of text does not start a new paragraph — that matches Markdown semantics and the way most rich-text editors think about paragraphs.
Lines
one\ntwo
The total number of lines, counting each line break. Useful for counting log entries, CSV rows, or any line-oriented input. Trailing blank lines are counted; an empty string has zero lines.
Reading time
238 wpm
Word count divided by 238 words per minute, the silent-reading rate Brysbaert (2019) established as the most defensible average for adult fiction-and-prose readers. Slower for technical or academic text (around 100–150 wpm); faster for skimming. Times below 60 seconds are rounded to "less than a minute".
Speaking time
150 wpm
Word count divided by 150 words per minute — the typical comfortable pace for presentations, audiobook narration, and conversational speech. News anchors and auctioneers go faster (180–250 wpm); slow, deliberate delivery for clarity is closer to 110 wpm. Use this number to estimate the runtime of a speech or scripted video.
Common platform character limits
Most online platforms enforce a length cap on user-generated text. The exact metric varies — some count codepoints, some count UTF-16 code units, some count graphemes, some count bytes — but the visible limits are reasonably stable. The table below summarises the most commonly hit ones.
| Platform / context | Limit | Counted as |
|---|---|---|
| X / Twitter post (premium) | 4,000 | codepoints |
| X / Twitter post (free) | 280 | codepoints |
| SMS (single, GSM-7 charset) | 160 | 7-bit chars |
| SMS (single, UCS-2 / Unicode) | 70 | code units |
| Bluesky post | 300 | codepoints |
| Mastodon post (default) | 500 | codepoints |
| LinkedIn post | 3,000 | codepoints |
| Facebook post | 63,206 | codepoints |
| Instagram caption | 2,200 | codepoints |
| Instagram bio | 150 | codepoints |
| YouTube title | 100 | codepoints |
| YouTube description | 5,000 | codepoints |
| HTML <title> (Google SERP truncation) | 50–60 | characters |
| Meta description (Google SERP truncation) | 155–160 | characters |
| Open Graph og:title | 60–90 | characters |
| Open Graph og:description | 110–200 | characters |
| Email subject line (mobile-friendly) | 40–50 | characters |
| Email subject (full visibility) | 60–70 | characters |
| App Store app title | 30 | characters |
| App Store subtitle | 30 | characters |
| Apple App Store description | 4,000 | characters |
| Google Ads headline | 30 | characters |
| Google Ads description | 90 | characters |
How counting handles Unicode and edge cases
Modern text contains characters that span multiple JavaScript code units (emoji, mathematical symbols, scripts beyond the Basic Multilingual Plane), characters built from combining sequences (accented letters, Indic scripts), and zero-width joiners that fuse sub-emojis into family or skin-tone emojis. Naively calling text.length in JavaScript counts UTF-16 code units, which gives the wrong answer in all of those cases. This counter uses Intl.Segmenter in grapheme mode to split text into user-perceived characters — the same algorithm browsers use for cursor movement and selection. The result matches what a reader would count: 👨👩👧 is one character, 🇳🇱 is one character, और (Hindi for "and") is one character. For browsers that do not yet support Intl.Segmenter, the counter falls back to a Unicode-aware regex; the difference is only visible on the most exotic compound emoji.
Frequently asked questions
What counts as a 'word'?
don't is one word and hello-world is one word. Numbers count as words. Empty input is zero across the board.How is reading time calculated?
Why does my emoji count as one character but my friend's app shows it as two?
Intl.Segmenter in grapheme mode — it counts user-perceived characters. Many older tools and most low-level string functions count UTF-16 code units instead, which splits emoji outside the Basic Multilingual Plane (most modern emoji) into two units, and splits compound emoji like 👨👩👧 (man-woman-girl) into many. JavaScript's "😀".length is 2; this counter reports 1.