🔢 Character Counter

Counts what you actually see, not UTF-16 units — so an emoji counts as one, not two. Includes X's weighted count, real SMS encoding limits, and the byte size.

Free No Signup Required Browser-Based
0
Characters
What you see on screen
0
Without spaces
0
Words
0
Sentences
0
Paragraphs
0
Lines

Encoding

Visible characters (graphemes)
0
Unicode code points
0
UTF-16 units (JavaScript length)
0
UTF-8 bytes
0

Platform limits

X / Twitter (free)0/280
Weighted: non-Latin counts 2, each URL counts 23
SMS (single message)0/160
Drops to 70 if any non-GSM character is present
Meta description0/155
Google truncates by pixel width, not characters
Title tag0/60
Roughly 600px — capitals and wide letters cost more
Instagram caption0/2200
Only the first ~125 show before "more"
LinkedIn post0/3000
Around 210 show before "see more"

What Character Counter Does

Counting characters sounds trivial and is the thing most counters get wrong, because "character" means four different things and only one of them is what you see on screen.

Take a thumbs-up emoji. To you it is one character. In Unicode it is one code point. In JavaScript — and therefore in most character counters, which use the obvious `length` property — it is two. A family emoji is one visible character, seven code points, eleven UTF-16 units and twenty-five bytes. A flag is one character reported as four. If your text contains any emoji, most counters are overstating its length, sometimes by a factor of ten.

The platform limits are usually wrong too, in a way that matters more. X does not count one per character: Latin letters weigh 1, but Chinese, Japanese, Korean and emoji weigh 2, and every URL counts as a flat 23 however long it really is. So 140 Japanese characters fills the 280 limit exactly, and pasting a 200-character tracking URL costs you 23.

And SMS has a cliff rather than a limit. One character outside the GSM 7-bit alphabet — an emoji, a curly quote pasted from Word, an em dash — forces the whole message into 16-bit encoding and cuts the limit from 160 to 70. This tool counts what you see, shows the other three figures alongside, and applies each platform's real rule rather than a flat number.

How to Use Character Counter

  1. Paste or type your text — everything updates live
  2. Read the visible character count, which treats each emoji as one character
  3. Check the encoding panel if you need code points, UTF-16 units or UTF-8 bytes
  4. Watch the platform bars for X, SMS, meta description, title tag, Instagram and LinkedIn

Formula Used by Character Counter

The four ways to count

graphemes ≤ code points ≤ UTF-16 units ≤ UTF-8 bytes

Grapheme
One visible character — what a person means by "character"
Code point
One Unicode value. An emoji with a skin tone is two
UTF-16 unit
What JavaScript length returns. Anything above U+FFFF takes two
UTF-8 byte
Storage size — 1 to 4 bytes per code point

Worked example

The family emoji 👨‍👩‍👧‍👦

  1. Graphemes: 1
  2. Code points: 7 — four people joined by three zero-width joiners
  3. UTF-16 units: 11
  4. UTF-8 bytes: 25

Result: One character by any human definition, reported as 11 by most counters

How X weights characters

weight 1 for Latin and common punctuation, weight 2 for everything else, 23 per URL

Light ranges
U+0000–U+10FF and parts of general punctuation
URLs
Replaced by a fixed 23 because every link is shortened

Worked example

Three different 280-limit posts

  1. 280 Latin characters = 280
  2. 140 Japanese characters = 280
  3. "Check " + a 200-char URL = 6 + 23 = 29

Result: All three are valid; only the first matches a naive character count

The SMS encoding cliff

All-GSM text: 160 per message. One non-GSM character: 70 per message.

GSM 7-bit
Basic Latin plus a small set of symbols and accents
UCS-2
The 16-bit fallback, used if any character falls outside GSM

Worked example

The same message with and without a curly apostrophe

  1. "Its ready" — all GSM, limit 160
  2. "It’s ready" — the ’ is not GSM, limit 70

Result: One punctuation mark more than halves how much you can send per message

What most counters report against what you see

Every figure verified in a browser. The third column is what JavaScript's length property returns, and therefore what a large share of online counters display.

TextYou seeCode pointsUTF-16 (most counters)UTF-8 bytes
a1111
é (single character)1112
é (e + combining accent)1223
👍1124
👋🏽 (with skin tone)1248
🇬🇧 (flag)1248
👨‍👩‍👧‍👦 (family)171125
日本語3339
Hello 👍 world13131416

Platform limits, and how each one really counts

The number is only half the rule. Several of these count something other than characters, which is why a single flat limit is misleading.

PlatformLimitWhat it actually counts
X / Twitter (free)280Weighted — non-Latin counts 2, every URL counts 23
SMS, single message160 or 70160 in GSM 7-bit; 70 if any character falls outside it
Meta description~155Google truncates by pixel width, not character count
Title tag~60Roughly 600 pixels — wide letters and capitals cost more
Instagram caption2,200Only about the first 125 show before "more"
LinkedIn post3,000Around 210 show before "see more"

Bytes per character in UTF-8

Relevant whenever a database column, an API payload or a file size is the real constraint rather than the character count.

Script or contentBytes per characterExample
Basic Latin, digits, ASCII punctuation1a, 7, ?
Accented Latin, Greek, Cyrillic, Hebrew2é, π, д
Chinese, Japanese, Korean, most others3日, 한, ट
Emoji and other supplementary characters4👍, 🎉
Emoji with modifiers or ZWJ sequences8 to 25+👋🏽, 👨‍👩‍👧‍👦

How to Read Your Result

The emoji problem is not an edge case

It would be easy to treat this as pedantry if emoji were rare. They are not — they appear in a large share of social posts, marketing copy, product names and messages. A counter reporting eleven characters for a single family emoji will tell you a 270-character post is over the limit when it is not, or that a database field will overflow when it will not. The fix has been available in every browser for years: Intl.Segmenter walks text by grapheme cluster, which is the formal name for "what a person calls a character".

Which count you need depends on the destination

There is no single correct answer, which is why all four are shown. Writing a tweet or an SMS: you want the platform's own rule. Filling a form with a maxlength attribute: that is enforced in UTF-16 units, so the browser will cut you off by the number most counters show. Sizing a database column or an API payload: that is bytes. Explaining to a person how long their text is: graphemes. Using the wrong one produces off-by-a-lot errors rather than off-by-one.

Why 140 Japanese characters equals 280 Latin ones

X doubled its limit from 140 to 280 in 2017, but only for languages that need the space. The weighting exists because Chinese, Japanese and Korean convey far more per character, so those languages kept an effective 140 while Latin scripts got 280. It is a deliberate equalization rather than a penalty. The URL rule has a different origin: every link is rewritten to a fixed-length shortener, so the length you paste is irrelevant to the count.

The smart-quote trap in SMS

This one costs real money at scale. Drafting a message in a word processor silently converts straight apostrophes to curly ones, and the curly apostrophe is not in the GSM 7-bit alphabet. That single substitution drops the per-message limit from 160 to 70, so a 150-character message that would have sent as one now sends as three — tripling the cost of a campaign for a change nobody made deliberately. The same applies to em dashes and ellipsis characters. Type directly into a plain field, or check the counter before sending.

Title and description limits are really pixel limits

Google does not truncate search snippets at a character count; it truncates at a width, roughly 600 pixels for a title. So a title of sixty narrow lowercase characters may fit comfortably while fifty-five wide ones in capitals get cut. The commonly quoted 60 and 155 figures are reasonable working approximations and nothing more. If a title matters, look at how it renders rather than trusting the count — and remember the snippet is often rewritten by Google anyway.

Counting locally is the point

Text pasted into a character counter is frequently a draft that has not been published yet — a press release, a legal notice, a message to a client. A counter has no reason to transmit it, and this one does not: the whole thing runs in the page, so it works with the network off and nothing you paste leaves the browser. That is easy to verify and worth verifying on any tool you paste unpublished work into.

Limitations & Accuracy Notes

  • Grapheme counting uses the browser's own Intl.Segmenter. A very old browser without it falls back to counting code points, which is closer than UTF-16 but still splits emoji with modifiers.
  • Platform limits change without notice, and paid tiers differ — X Premium allows far more than 280. Treat the bars as a guide and confirm against the platform if it matters commercially.
  • The X weighting implements the published rules for character weight and URL length. X may apply additional handling to mentions, media and quoted posts that is not modeled here.
  • Meta description and title limits are shown in characters because that is what people search for, but Google truncates by pixel width, so the figures are approximations rather than thresholds.
  • SMS detection covers the standard GSM 7-bit alphabet. Some carriers and gateways handle the extension table differently, which can shift where the 160 boundary falls by a character or two.
  • Word counting splits on whitespace, which suits languages that separate words that way. Chinese, Japanese and Thai do not, so the word count is not meaningful for them.

Frequently Asked Questions

Why do character counters disagree about emoji?
Because they count different things. A thumbs-up emoji is one character you can see, one Unicode code point, and two UTF-16 units — and it is that last number JavaScript's length returns, which is what most counters report. A family emoji is one visible character built from seven code points and eleven UTF-16 units. This tool counts what you see and shows the other figures alongside.
How does X actually count characters?
Not one per character. Latin letters, digits and common punctuation weigh 1; most other scripts, including Chinese, Japanese, Korean and emoji, weigh 2. Every URL counts as a flat 23 regardless of its real length, because links are shortened. So 140 Japanese characters fills the 280 limit, and a 200-character URL costs only 23.
Why did my SMS limit drop from 160 to 70?
One character outside the GSM 7-bit alphabet forces the whole message into 16-bit encoding, which cuts the limit from 160 to 70. The usual culprits are emoji, curly quotes pasted from a word processor, and em dashes. A single smart apostrophe can more than halve your message length.
Is the 60-character title tag limit real?
It is a useful approximation of the real constraint, which is pixel width — Google truncates titles at roughly 600 pixels. A title of 60 narrow characters may fit where 55 wide ones in capitals will not. Treat 60 as a guide and check how the title actually renders.
What is the difference between characters and bytes?
A character is what you see; a byte is storage. In UTF-8, English letters take one byte each, accented Latin and Greek take two, most Asian scripts take three, and emoji take four. So a 10-character message can be anywhere from 10 to 40 bytes, which matters for database column limits and API payload sizes.
Is my text uploaded anywhere?
No. Counting happens entirely in your browser as you type, so you can paste confidential drafts safely and the tool works with no internet connection.

References & Further Reading

By OnlineToolHubs Team • September 2026