Character counter
Count characters against a budget you define — not against a platform limit we guessed at.
Your text stays in your browser.
Stay inside a character budget you define.
Your text at a glance
Reading and speaking times are estimates.
Short text targets
Set your own limits. We deliberately do not hardcode platform limits, because they change and a stale number is worse than none.
- 0 / 60 used · 60 left
- 0 / 155 used · 155 left
- 0 / 200 used · 200 left
Characters are counted the way a reader sees them: one emoji is one character, even when it is several code points underneath.
Character limits show up in bios, meta descriptions, SMS campaigns, form fields and abstract submissions. They rarely agree with each other, and they change without notice.
So this tool does not ship a list of platform limits. You name your targets and set their ceilings, and the counter tracks each one. A limit you typed in yourself is a limit you can trust to still be right next month.
A character budget is nearly always about fit rather than substance: a line of a search result, a field that stops accepting input, a message that splits in two and gets billed twice. Which of those you are up against decides which number matters and how much margin to leave yourself.
How this tool counts
Characters are counted as grapheme clusters — the units a reader perceives. A flag emoji, a skin-toned thumbs-up and an accented "ç" are each one character, even though each is stored as several code units underneath.
This matters because "🇧🇷".length in JavaScript is 4. Reporting 4 would be technically about storage and useless to a person writing a bio.
"Characters without spaces" excludes every kind of whitespace: ordinary spaces, tabs, line breaks, and the non-breaking spaces that word processors insert without telling you.
What one character means once emoji and accents are involved
There are three defensible answers to the question "how many characters is this", and they disagree. A grapheme cluster is what a reader would point at and call a character. A code point is one entry in Unicode. A UTF-16 code unit is one of the sixteen-bit slots a browser stores the text in. For unaccented English the three numbers are identical, which is why the distinction stays invisible until it suddenly costs you something.
Accents are where it stops being theoretical. The letter "é" exists twice in Unicode: as a single precomposed entry, and as a plain "e" followed by a combining acute accent. Both render identically on screen and neither is wrong. A counter working in code points reports one for the first spelling and two for the second, so two strings that look the same produce different totals and the reader has no way to see why.
Text typed on a keyboard is usually precomposed. Text pasted out of a PDF, exported from some Mac applications, or produced by an older publishing system is often decomposed instead. Counting grapheme clusters removes the problem: a base letter and everything stacked on it form one cluster, so both spellings of "é" come back as one.
| Text | Grapheme clusters | Code points | UTF-16 code units |
|---|---|---|---|
| café (precomposed é) | 4 | 4 | 4 |
| café (e plus combining acute) | 4 | 5 | 5 |
| 👋 | 1 | 1 | 2 |
| 👋🏽 (with skin-tone modifier) | 1 | 2 | 4 |
| 🇧🇷 (flag) | 1 | 2 | 4 |
| 👨👩👧 (family) | 1 | 5 | 8 |
Why two counters give two answers
Any two tools measuring the same paragraph can disagree. The causes are mundane rather than mysterious, and knowing which one is in play tells you how much margin a given ceiling needs.
None of the causes below makes one count wrong. They make the destination the arbiter: write against this page, then check the finished text in the field that will accept or reject it, particularly if you are within the last five characters of a hard ceiling.
- Normalisation. Some systems convert text to a canonical form before measuring it and some do not, which moves the total for any string containing combining marks.
- Trimming. A destination may strip leading and trailing whitespace before it counts, so a stray newline at the end of a paste costs a character in one place and nothing in another.
- Weighting. Some services charge more than one unit for characters outside the Latin alphabet, so a sentence in Japanese consumes more of the budget than a Latin-script sentence of the same length.
- Substitution. Links are frequently measured at a fixed length whatever the real URL is, because the service intends to rewrite them on the way out.
- Invisible characters. Zero-width joiners, soft hyphens and variation selectors occupy no width on screen and still take a slot in almost every counting scheme.
Where a character limit actually bites
Character budgets come in two kinds. Some are enforced: the field refuses one more keystroke, or the message splits and you pay twice. Others are cosmetic: nothing rejects your text, it simply gets cut off in front of the audience you wrote it for. The second kind does more damage, because nothing tells you it happened.
| Where | Working range | What happens past it |
|---|---|---|
| Meta description | Around 150 to 160 | Search results truncate it, usually mid-sentence |
| Title in a search result | Around 55 to 60 | The end of the title is replaced by an ellipsis |
| SMS message | 160 or 70 per segment | Splits into segments, each one billed |
| Form field with a maxlength | Whatever the developer set | Typing stops silently; a paste is cut at the ceiling |
| Profile bio | Set by the platform, revised over time | The field refuses the text or the page truncates it |
| Conference or journal abstract | Set in the call for papers | The submission system rejects the field outright |
SMS: how one emoji turns 160 characters into 70
SMS is the clearest case of a ceiling that is not really about characters at all. The message is encoded before it is sent, and the encoding sets the ceiling.
The default encoding is GSM-7, a compact alphabet of roughly 128 symbols plus a small extension set. It covers unaccented Latin letters, digits, ordinary punctuation and a specific short list of accented letters — é and à are in it, á, ã, õ and ê are not. A message that stays inside that alphabet fits 160 characters into one segment.
The moment a single character falls outside it, the message switches to UCS-2, which spends two bytes on everything. Not on the offending character: on the whole message. The ceiling drops to 70.
| Encoding | Single message | Per segment once split |
|---|---|---|
| GSM-7 | 160 characters | 153 characters |
| UCS-2 (emoji, accents outside the GSM set, non-Latin scripts) | 70 characters | 67 characters |
With spaces, without spaces, and who asks for which
Both totals are shown because different people ask for different ones and are rarely explicit about which.
With spaces is the correct default for anything about fit. A space occupies width on a line, in a field and inside an SMS segment, so any limit describing how much text will physically go somewhere counts it. Meta descriptions, form fields, bios and messages are all with-spaces ceilings.
Without spaces turns up where the number stands in for how much content there is rather than how much room it needs. Some translation and typesetting conventions price that way, and a few course rubrics specify it. If a brief says "characters" and stops there, it means with spaces — but the gap between the two totals on ordinary prose is about a sixth of the text, which is large enough to be worth one question before you write to the wrong one.
Three things inflate a with-spaces count without looking like they should. A double space after a full stop, kept out of habit or inherited from an old document. A non-breaking space, which a word processor inserts to stop a line breaking awkwardly and which no keystroke distinguishes from an ordinary one. And a soft hyphen, an invisible marker for where a word may be split, which arrives in quantity when you paste from a PDF. All three are counted. Only the first can be seen.
Why there is no table of platform limits here
It would be the easiest section on the page to write and the fastest to rot. Ceilings on social networks, ad platforms and content systems change on their owners' schedule, and nobody notifies the pages that quoted the old number. A stale limit is worse than no limit, because a reader who finds a figure here has no reason to doubt it and no way to check it without leaving.
The counter takes its ceilings from you instead. Name a target, set its number, and it is tracked against whatever is in the box. Several can run at once, which is the normal case — one piece of text often has to serve as a headline in one place, a summary in another and a caption in a third.
Getting a ceiling you can rely on takes about a minute:
- Open the field the text is destined for: the real composer, admin panel or submission form, not a screenshot of it.
- Read the counter it shows you, or paste in filler and watch where it stops accepting input. That refusal point is the only ceiling that is definitely real.
- Enter that number here as a named target.
- Subtract a small margin if the destination trims whitespace or rewrites links, so that a two-character surprise on submission day does not cost you the last clause.
A worked example
The string "Olá! 👋🏽 Tudo bem?" measured three ways:
- Characters (with spaces)
- 16
- Characters (no spaces)
- 13
- UTF-16 code units (what .length reports)
- 19
The waving-hand emoji with a skin-tone modifier is one character to a reader and four code units to a computer. This counter reports the reader's number.
Frequently asked questions
Why does your count differ from the one on a social platform?
Platforms apply their own rules — some weight non-Latin scripts differently, some count a link as a fixed length regardless of its real one. Treat this as an accurate count of the text itself, and the platform's own field as the final word.
How many characters is an emoji?
One, here. A composed emoji such as a family or a flag is a single grapheme cluster, and that is what a reader sees.
Do line breaks count as characters?
They count in the "with spaces" total and are excluded from the "no spaces" total, along with tabs and non-breaking spaces.
Can I track more than one limit at a time?
Yes. Add as many named targets as you need — a headline, a summary and a caption can all be tracked against the same text at once.
Should I count with spaces or without?
With spaces, unless something told you otherwise. Every limit that describes how much text will fit somewhere counts the space, because a space takes up room. Without-spaces figures appear in some translation pricing and a few marking rubrics, and when that is what is wanted the brief almost always says so in as many words.
Why does adding one emoji make an SMS cost three times as much?
An emoji pushes the entire message out of the compact GSM-7 alphabet and into UCS-2, which cuts per-segment capacity from 160 to 70. A 158-character message that fitted in one segment becomes 159 units in an encoding that allows 67 per segment, so it goes out as three. You are not billed for the emoji; you are billed for re-encoding everything around it.
How long should a meta description be?
Around 150 to 160 characters is the usual working range, but the real constraint is pixel width rather than a count, so wide letters and capitals are cut earlier than narrow ones. Put whatever has to survive into the first 120 characters and treat the rest as a bonus. Check the finished page in a search-result preview instead of trusting any single number.
Do accented letters count as one character or two?
One here, however they happen to be stored. Unicode allows "á" to be a single precomposed character or a plain "a" followed by a combining accent, and counting grapheme clusters returns one for both. Systems that count code points report two for the decomposed form, which is a common source of differences nobody can account for.
My count jumped after I pasted from a PDF. What happened?
PDFs and word processors carry invisible characters that survive a paste: soft hyphens marking where a word may break, non-breaking spaces, and occasionally zero-width joiners. None of them show on screen and all of them count. Pasting through a plain-text editor first, or retyping a short passage, clears them out.