Unicode Character Counter
One text, four honest counts: graphemes (what you see), code points, UTF-16 units (what JavaScript sees) and UTF-8 bytes (what the network sees), side by side.
How counting works (spec v1)
- Words are locale-aware word segments: punctuation and emoji are not words, numbers like 3.50 count as one, contractions (don't) count as one, hyphenated compounds (follow-up) count as two, and a URL or email address counts as one.
- Characters are what you perceive: a family emoji, a flag or an accented letter counts as 1. Code points, UTF-16 units and bytes are in Detailed statistics.
- Sentences use locale-aware boundaries with abbreviation handling, so Dr., e.g. and $3.50 do not split.
- Paragraphs are blocks separated by a blank line. Line counts are in Detailed statistics.
- Density uses the same words as the headline count, phrases never cross a sentence boundary, and filters change what is listed, never the percentages.
Reading time uses 238 words per minute, speaking time 130 words per minute.
Detailed statistics
*English-language estimate. For a full report use the Readability Checker.
X's own rules: every link counts as 23, emoji and CJK count as 2.
Hard limit 2,200 characters; only about the first 125 show before "more".
Guidance, not a limit: Google truncates by pixel width per device. Check the SERP preview.
No fixed limit exists; snippets are truncated to fit and often rewritten.
Keyword density checker
Density is each phrase's share of ALL words in the text (the same word count as the headline). Filters and the English stopword list only change which phrases are listed, never the percentages. Phrases never bridge two sentences.
Type or paste text above to see your top words and phrases.
Very long text: phrases are computed from the first 200,000 words.
Four counts, one string: a worked example
Take the string "cafΓ© πΊπΈπ¨βπ©βπ§βπ¦". A human counts 7 characters: four letters, a space, a flag, a family. Graphemes: 7. Code points: 13, because the flag is two regional indicators and the family is seven joined code points. UTF-16 units: 17, since every emoji code point above the base plane costs a surrogate pair. UTF-8 bytes: 34. Every one of those numbers is correct for its own question: display width, Unicode processing, JavaScript string math, and storage cost respectively.
Bugs happen when layers disagree: a form validates 100 "characters" in JavaScript units, the database truncates at 100 bytes, and the user typed 60 emoji. Paste the failing text above, open Detailed statistics, and the mismatched layer identifies itself immediately.
Unicode counting FAQ
Grapheme, code point, code unit, byte: what is the difference?
A grapheme cluster is one user-perceived character: one family emoji, one flag, one accented letter. A code point is one Unicode number; a flag is two code points, a family emoji up to seven. UTF-16 code units are how JavaScript stores strings; code points above U+FFFF take two (a surrogate pair), so "π".length is 2. UTF-8 bytes are what files and networks carry: ASCII is 1 byte, most European letters 2, CJK 3, emoji 4. This page shows all four so you can match any system's definition.
Why does "π¨βπ©βπ§βπ¦".length equal 11 in JavaScript?
Because a family emoji is built from four person emoji joined by three invisible zero-width joiners. Each person is 2 UTF-16 units, each joiner is 1: four times two plus three is eleven. It is 7 code points, 25 UTF-8 bytes, and exactly 1 grapheme, which is what a human, and this page's headline count, calls it.
Which count do databases and forms enforce?
Almost never graphemes. VARCHAR(255) in modern MySQL counts code points; many validators count UTF-16 units; payload limits count UTF-8 bytes. When a form rejects text that "fits", compare its error against the UTF-16 and byte numbers in Detailed statistics; one of them will match the enforcement, and that tells you what to trim.
Why do UTF-8 bytes matter for the web?
Bytes are what users download. The same 160 visible characters cost 160 bytes in English, around 300 in Greek or Cyrillic, and around 480 in Chinese. SMS segmentation, HTTP header limits, URL length caps and database row sizes are all byte or unit budgets underneath, which is why a byte count belongs next to every character count.
Is the text analyzed locally?
Yes, entirely in your browser. Nothing is uploaded, and the draft autosave is a visible on-device toggle with a delete control.
More free tools: Character Counter · Word Counter · Base64 Encoder/Decoder · JSON Formatter · X Character Counter