Paste a family emoji into three different character counters and you can get three different answers: 1, 7, or 11. All three are defensible. The disagreement comes from a question with no single right answer, which is what counts as a character in the first place.
Three Definitions, Three Answers
Text has layers, and each layer counts differently.
Grapheme clusters are what a reader perceives as one character. The family emoji 👨👩👧 looks like one thing on screen, so by this definition it is one character. This is the count that matches human intuition.
Code points are the individual Unicode values behind that appearance. The family emoji is actually three people joined by invisible zero-width joiners, which is five code points. An accented é can be one code point or two, depending on whether it was typed as a single precomposed character or as an e followed by a combining accent.
Code units are how the text is stored in memory. JavaScript uses UTF-16, where most characters cost one unit but emoji cost two. This is what `"👋".length` returns in a browser console, and it returns 2, which surprises people.
This counter reports code units, the same number JavaScript sees, because that is what most platform limits are actually measured against.
How Major Platforms Count
Behaviour verified against current platform documentation. Platforms change these rules without announcement.
| Platform | Limit | How it counts | Gotcha |
|---|---|---|---|
| X | 280 | Weighted code points | Latin and most European text costs 1; CJK costs 2 |
| X links | 23 | Fixed | Every URL costs 23 no matter how short or long |
| SMS (GSM-7) | 160 | 7-bit characters | One accented letter can drop you to 70 |
| SMS (UCS-2) | 70 | 16-bit characters | Triggered by any character outside the GSM alphabet |
| Meta description | ~160 | Pixel width | Wide letters like W and M eat the budget faster |
| Instagram caption | 2,200 | Code points | Line breaks count; hashtags count |
| LinkedIn post | 3,000 | Code points | Truncates visually near 210 with "see more" |
| YouTube title | 100 | Code points | Rejected outright above the limit, not truncated |
The SMS Trap That Triples Your Bill
SMS is where character counting stops being academic and starts costing money. A standard text message holds 160 characters using GSM-7, a compact 7-bit alphabet covering unaccented Latin letters, digits and common punctuation.
The moment your message contains one character outside that alphabet, the whole message switches to UCS-2 encoding and the limit drops from 160 to 70. A single curly apostrophe, the kind Word inserts automatically, is enough to do it. So is an emoji, an em dash, or the é in café.
Messages longer than one segment get split and reassembled by the recipient's phone, and each segment is billed separately. A 150-character message with one smart quote becomes three segments instead of one. At scale that is triple the cost for a change nobody can see.
If you send transactional SMS, normalise your text first: replace curly quotes with straight ones, em dashes with hyphens, and strip accents where the meaning survives.
Google measures pixels, not characters
The familiar 160-character meta description limit is a convenient approximation. Google truncates by rendered width, roughly 920 pixels on desktop. A description in narrow characters can survive past 165, while one full of capitals and wide letters gets cut before 145. Aim for 150 and front-load anything that matters.
Working Within Tight Limits
When you need to lose 20 characters and the meaning has to survive, these cuts do the least damage.
Delete the throat-clearing
Openers like "We are excited to announce" and "In this article we will" cost 25 to 30 characters and carry no information. The sentence almost always reads better without them.
Cut adverbs before you cut nouns
Very, really, actually, quite and just are usually free to remove. Nouns and verbs carry the meaning, so protect those first.
Use digits, not words
"5" instead of "five" saves three characters, and in headlines and captions the digit reads faster anyway.
Replace phrases with single words
"In order to" becomes "to". "At this point in time" becomes "now". "Due to the fact that" becomes "because". Each swap buys 10 to 15 characters.
Move detail out of the caption
If a caption will not fit, the detail probably belongs in the first comment or on the landing page. Squeezing it in usually costs clarity.
Check your count before you post
Characters with and without spaces, updated as you type.
With Spaces or Without?
Both counts are shown because different industries need different ones.
The count with spaces is what platforms enforce. Every limit in the table above includes spaces, so this is the number to watch when drafting a post or a meta description.
The count without spaces comes from translation and typesetting. Translators are often paid per character excluding spaces, and typographers use it to estimate how much room text needs at a given size. If someone asks for a character count without telling you which, the safe assumption is that publishers and platforms mean with spaces, while translation agencies mean without.
Frequently Asked Questions
Related Tools
Keep Reading
Social Media Limits: The Truncation Point Matters More Than the Cap
LinkedIn allows 3,000 characters and hides everything past 210. The visible window is what shapes your writing, and it is far shorter than the limit.
Title and Meta Description Length: Pixels, Not Characters
Google truncates by rendered width, so a title of capitals runs out thirty characters early. Plus why it rewrites most descriptions anyway.
Word Count Targets: What Editors, Platforms and Google Expect
Two counters can disagree by five percent on the same paragraph. Here is how counting actually works, and the targets worth writing to.
camelCase, snake_case, kebab-case: Which Case Goes Where
The convention each language expects, the one language where capitalisation changes behaviour, and why acronyms break every rule.