Character Counter

Type or paste text below for a live character count, shown both with and without spaces. The count runs in your browser as you type, so nothing is uploaded and nothing is stored.

Characters

0

Characters (no spaces)

0

Words

0

Character Limits You Are Probably Checking Against

Almost every character limit in daily use comes from one of four places: a social platform, a search result, a mobile network, or an ad format. The current figures:

Where Limit Counted as
X / Twitter post (standard) 280 Weighted — see below
X / Twitter post (Premium) 25,000 Weighted
SMS, single segment 160 (GSM-7) / 70 (UCS-2) Septets or 16-bit units
SMS, per segment when split 153 (GSM-7) / 67 (UCS-2) Septets or 16-bit units
Title tag in Google results ~60 Pixel width, ~600px
Meta description in Google results ~155 Pixel width, ~920px desktop
Instagram caption 2,200 Code points
Instagram bio 150 Code points
LinkedIn headline 220 Code points
LinkedIn post 3,000 Code points
YouTube video title 100 Code points
YouTube description 5,000 Code points
Bluesky post 300 Graphemes
Mastodon post 500 by default Code points
Reddit post title 300 Code points
Google Ads headline 30 Code points
Google Ads description 90 Code points
Pinterest pin description 500 Code points

Two of these are not really character limits at all. Google does not truncate a title or description at a character count — it truncates at a pixel width, roughly 600px for titles and 920px for descriptions on desktop, considerably less on mobile. A title full of narrow letters ("illiterati") survives past 60 characters; one full of capitals and wide letters ("WARM WOMBAT WORKWEAR") gets cut before it. The 60/155 figures are averages that happen to work for ordinary mixed-case English, which is why they are quoted everywhere. Treat them as a guide, and put the words that matter first so a truncation costs you nothing important.

Why an Emoji Costs More Than One Character

The count above measures UTF-16 code units — the unit JavaScript uses for string length, and the same unit behind most web form validation, Java, C# and Windows APIs. For ordinary Latin text one code unit is one visible character and the distinction never surfaces. Emoji break it immediately.

Every code point above U+FFFF is stored as a surrogate pair: two code units. Nearly all pictographic emoji live up there, so a single smiling face is 2. It gets worse when emoji are built by composition:

That last one is a single glyph on your screen and eleven characters to a form validator. If you have ever had a 275-character post rejected as too long, an emoji is usually why.

Accented and non-Latin characters have a subtler version of the same problem. "é" has two valid encodings: the single precomposed code point U+00E9, or a plain "e" followed by a combining acute accent at U+0301 — two code units, pixel-identical on screen. Text pasted out of certain PDFs, macOS filenames and some XML pipelines arrives decomposed, so an accented French or Vietnamese passage can count noticeably higher than the same text typed fresh. Normalising it (NFC) collapses the pairs back down.

X applies its own arithmetic on top of all this. Its 280 limit is weighted: characters in the Latin-1 range and common punctuation count as 1, and everything else — CJK, Arabic, Cyrillic, emoji — counts as 2. A post in Japanese therefore gets about 140 visible characters, not 280.

SMS: 160, 70, and the Segment Nobody Mentions

The 160-character figure is a genuine engineering constant, not a product decision. The GSM standard packs seven-bit characters into eight-bit bytes, and 140 bytes of payload holds exactly 160 septets. That alphabet covers unaccented Latin letters, digits and basic punctuation. Nine characters — { } [ ] ~ ^ \ | and — sit in an extension table and quietly consume two septets each.

The moment your message contains a character outside that alphabet — a curly "smart" apostrophe pasted from Word, an em dash, an emoji, an accented name — the whole message re-encodes as UCS-2 and capacity drops from 160 to 70. One curly quote can more than halve your allowance.

Longer messages get split into segments and reassembled by the handset. Each segment spends 7 bytes on a reassembly header, which costs 7 septets of payload:

Encoding Single message Per segment when split
GSM-7 160 153
UCS-2 70 67

So a 161-character GSM-7 message is billed as two segments totalling 306 characters of capacity, and a 306-character message is three. If you are sending at volume, checking the count before you send is the difference between one billable segment and two.

"Excluding Spaces" — Who Actually Wants That

The second figure looks redundant, because virtually no platform limit excludes spaces. It exists for people who are being paid or charged by volume of text.

Translation, transcription and typesetting work has historically been priced per unit of text rather than per hour, and several of those units are character-based. Continental European agencies often quote per "standard line" of roughly 55 characters; some clients specify that spaces are excluded from the count, others that they are included, and the difference is around 15–18% of the invoice on ordinary English prose. A quote given against the wrong count is a quote given at the wrong price. A handful of academic and grant forms also state their limits excluding spaces, usually where the field was designed around a typesetting constraint.

If you are on either side of that kind of transaction, agree which number you are both using before work starts. If you are checking a social or SEO limit, ignore the no-spaces figure entirely.

Trimming to Fit Without Wrecking the Sentence

When you are over by a small margin, the reflexive fix — deleting adjectives — is usually the worst-reading one. Cheaper cuts, roughly in order of how little they cost you:

Then leave headroom. Sitting exactly on 280 or exactly on 160 is fragile: a platform that weights characters differently, an autocorrect that swaps a straight apostrophe for a curly one, or a downstream system that appends a signature will push you over.

Working to a word target rather than a character one? The word counter has the essay and article thresholds. If you are checking prose readability rather than length, average sentence length is the more useful measure — the sentence counter covers it.

Frequently Asked Questions

Why does my emoji count as two characters?

The counter measures UTF-16 code units, the same unit JavaScript, Java, C# and most web forms use. Characters above U+FFFF — which includes nearly every pictographic emoji — need two code units, so they register as 2. A thumbs-up with a skin-tone modifier is 4, and the four-person family emoji is 11, because it is several emoji joined by invisible zero-width joiners.

Do spaces count toward a character limit?

On essentially every platform limit — X, SMS, meta descriptions, Instagram captions — yes, spaces count. The 'excluding spaces' figure exists for a different purpose: translation and typesetting work that is priced by volume of text, and a handful of academic forms that specify it. If a limit does not say otherwise, assume spaces are included.

Why does a 200-character text message get billed as two messages?

SMS carries 160 characters in one segment using the 7-bit GSM alphabet. Longer messages are split, and each segment then spends 7 bytes on reassembly headers, dropping capacity to 153 characters per segment. So 200 characters travels as two segments, not one and a quarter.

Does one accented letter always count as one character?

Not always. 'é' can be stored as the single code point U+00E9 or as a plain 'e' followed by a combining acute accent — two code units that look identical on screen. Text copied out of some PDFs and macOS filenames arrives in the decomposed form and counts higher than expected.

Is my text uploaded anywhere?

No. The count is computed in your browser as you type. Nothing is transmitted, logged or stored, which is why the tool keeps working if you go offline after the page has loaded.

Which count should I paste into a character-limited field?

Use the total including spaces, then leave a small margin. Some platforms count differently from a raw code-unit total — X gives non-Latin characters double weight, and Bluesky counts user-visible graphemes — so a number sitting exactly on the limit can still be rejected.