Character Counter — Live Count for X, SMS, Meta Description & More
Count characters, graphemes, Unicode code points, and UTF-8 bytes in real time. Shows live remaining-quota bars for X (Twitter), SMS, meta description, LinkedIn, Instagram, YouTube titles, and more. 100% local.
Last updated:
Characters
146
UTF-16 code units
Graphemes
145
User-visible chars
Code points
145
Unicode scalars
Bytes
150
UTF-8 encoding
Letters+Digits
116
No spaces / punct
No spaces
122
Words
25
Lines
1
UTF-16 units
146
URLs count as 23 chars; each emoji counts as 2. Live count here is a close approximation.
Multi-segment SMS drops to 153 chars per segment. Emoji forces UCS-2 → 70 chars per segment.
Used when any non-GSM char (emoji, most non-Latin) is present.
Google truncates around 155–160 chars on desktop, ~120 on mobile.
Google typically shows the first ~50–60 chars of a <title>.
First ~140 chars visible before 'see more' collapse.
Practical rec: keep under 80 chars for max engagement.
First 125 chars show without 'more'. Max 30 hashtags.
First ~60 chars visible on search results.
First 100–150 chars show on search snippet.
Type or paste text to see character count in five ways: JavaScript length (UTF-16), grapheme clusters (what users see), Unicode code points, UTF-8 bytes, and lettered / numeric characters only. Live progress bars show remaining quota for X / Twitter, SMS (GSM-7 & UCS-2), meta description, LinkedIn, Instagram, and YouTube.
What is Character Counter?
'Character count' looks simple until Unicode gets involved. JavaScript's string.length returns UTF-16 code units, so 😀 counts as 2 and the family emoji 👨👩👧 counts as 8. What humans count is grapheme clusters — the family emoji is one. What a database column stores is UTF-8 bytes — that emoji is 11 bytes. Each platform has its own rule too: X/Twitter counts each emoji as 2, SMS suddenly switches from 160 to 70 chars per segment when any non-GSM character appears, Google's SERP snippet truncates the meta description around 155–160 chars on desktop and 120 on mobile. This tool shows all five counts side by side so you can plan for the right constraint.
How to count characters online
- 1Type or paste text into the input pane — counts update on every keystroke.
- 2Read the five counters on the right: Characters, Graphemes, Code points, Bytes, Letters+Digits.
- 3Scroll to the Platform quota panel — each shows a progress bar and how many characters you have left before hitting X, SMS, or meta-description limits.
- 4For SEO copy, target ≤60 chars for <title> and 150–160 for <meta description>. For tweets, aim for ≤280 characters.
Use Cases
Draft tweets that don't get cut off
X's 280-char limit is generous but easy to bust with URLs and emoji. The live counter avoids the 'compose in the X UI, hit send, then edit' trap.
Write SMS marketing copy
Stay under 160 chars for GSM-7 (single segment) or 70 chars for UCS-2 (if any emoji sneaks in). The tool shows both bars so you see when adding one emoji halves your budget.
Optimize meta title / description
Google shows ~60 chars of a <title> and ~155 chars of a <meta description> on desktop. Compose copy that fits without ellipsis.
Size a VARCHAR column
The Bytes counter gives the actual UTF-8 storage size. Useful when comparing 'VARCHAR(255)' semantics between databases (Postgres counts characters; MySQL utf8mb4 counts bytes with a 3–4 byte multiplier).
Key Concepts
- Grapheme cluster
- The user-perceived unit of text. Combines base character + combining marks + ZWJ sequences. Emoji families like 👨👩👧 are one grapheme.
- UTF-16 code unit
- JavaScript's storage unit. Characters in the Basic Multilingual Plane (U+0000–U+FFFF) are 1 code unit; astral characters (emoji, rare CJK) are 2 (a surrogate pair).
- GSM-7 vs UCS-2
- SMS's two encodings. GSM-7 fits 160 chars per segment but only supports basic Latin + a few symbols. UCS-2 supports any Unicode but fits only 70 chars per segment.
Tips & Best Practices
- ▸Twitter's official rule is 'weighted code point' counting — this tool's Characters column is a close approximation, not exact. Use X's own composer for final validation.
- ▸A single Chinese, Japanese, or Korean character is 1 UTF-16 code unit but 3 bytes in UTF-8. Plan storage in bytes and display in characters — never mix them up.
- ▸Grapheme count is the most user-intuitive number. Use it when you promise users a 'max N character' UI limit.
- ▸Meta description length is a soft cap, not a hard one — Google can rewrite snippets. The 155–160 char target is what tends to survive intact on desktop.
Frequently Asked Questions
What's the difference between characters, graphemes, and code points?
Characters (JavaScript string.length) counts UTF-16 code units — emoji like 😀 counts as 2. Code points counts Unicode code points — 😀 is 1, but 👨👩👧 is still 4. Graphemes counts what users see — 👨👩👧 is 1. For 'is this tweet too long' you usually want graphemes; for storage you want bytes.
Which count does X (Twitter) use?
X counts weighted code points: most Latin / Cyrillic / Greek chars are 1, most CJK chars are 2, and each emoji is 2. This tool shows a close approximation using JS string.length. For exact planning, X's own composer is the source of truth.
Why does SMS have both 160 and 70 character limits?
GSM-7 encoding (basic Latin) fits 160 chars per SMS segment. As soon as any non-GSM character appears — most commonly an emoji — the whole message switches to UCS-2 (16-bit), which fits only 70 chars per segment.
Is the count accurate for Chinese / Japanese / Arabic text?
Yes. Characters count each CJK ideograph as 1 (JS treats them as BMP chars = 1 code unit). Bytes shows the UTF-8 size, which is 3 bytes per typical CJK char and 4 bytes for some rarer ones — useful for database column sizing.
Is my text uploaded anywhere?
No. Counting runs entirely in your browser — nothing is sent to a server.
Related Tools
Regex Tester
Test regular expressions online. Live match highlighting, capture groups, and support for JavaScript flags (g, i, m, s, u, y).
Regex Replace
Find and replace text with a regular expression online. Supports every JavaScript flag (g, i, m, s, u, y), all backreferences ($1..$9, $&, $`, $', $<name>), and escape sequences (\n, \t) in the replacement. Live match-by-match preview and diff. 100% local.
Text to Speech
Convert text to spoken audio using your browser's built-in Speech Synthesis API. Pick from all voices installed on your OS, adjust rate, pitch, and volume. No account, no download, no upload — 100% local.
XML Formatter
Format, beautify, and validate XML documents online. Handles namespaces, CDATA sections, and mixed content.
SQL Formatter
Format and beautify SQL queries. Supports SELECT, JOIN, subqueries, CTEs, and multiple SQL dialects.
Case Converter
Convert text between camelCase, PascalCase, snake_case, kebab-case, CONSTANT_CASE, Title Case, and more.