Character Count: The Complete Guide (2026)

Character count looks like the simplest thing a computer can do β€” until an emoji, an accent, or a platform limit turns the number into a guess. The real definitions, the limits that matter in 2026, and the traps that break naive counters.

On this page

What "character count" actually measures

A character count is the size of a string. Every counter answers a slightly different question: how many code units, how many code points, how many grapheme clusters, how many bytes? For most prose in English, all four answers are the same number. For anything with an emoji, an accent, or a non-Latin script, they diverge. Sometimes by a factor of four.

The practical definition: a character is what a human reader counts as one. The string hello is five characters. The string cafΓ© is four. The string πŸ‘‹ is one. A counter that disagrees with a reader is a counter that's measuring the wrong thing. Usually because it's reporting UTF-16 code units instead of grapheme clusters.

Two reports matter in practice: with spaces (the number every platform cap uses) and without spaces (useful for word-rate and typesetting math). Everything else is a developer concern.

The platforms where character limits matter most

Every limit below is what the platform actually enforces in 2026, not what the documentation said five years ago. Get one of these wrong and your post truncates, your ad gets rejected, or your SMS bills double.

PlatformFieldLimit
X (Twitter). FreePost280
X (Twitter). PremiumPost (with "Show more")25,000
InstagramCaption2,200
InstagramBio150
LinkedInPost3,000
LinkedInHeadline220
FacebookPost (full visibility)~477 before truncation
TikTokCaption2,200
YouTubeTitle100
YouTubeDescription5,000
SMS (GSM-7)Single segment160
SMS (UCS-2, emoji or non-Latin)Single segment70
SEO — title tagSERP display50-60
SEO — meta descriptionSERP display155-160
Google Ads (RSA)Headline30
Google Ads (RSA)Description90
Google AdsDisplay URL path15 per path field
Apple App StoreApp name30
Apple App StoreSubtitle30

Three of these are doing most of the work for most writers. Twitter character count at 280 forces ruthless editing. SMS character count at 160 (or 70 with emoji) determines whether a single message costs one segment or two. And character count meta description at 155-160 is the difference between a clean SERP snippet and one that ends in an ellipsis mid-sentence.

With spaces vs. without spaces β€” when each one matters

Every counter on the web reports two numbers. They almost always confuse first-time users. The rule is short.

With spaces is the only number that matters for a platform cap. Twitter counts spaces. SMS counts spaces. Google Ads counts spaces. The meta description box in every CMS counts spaces. If a tweet draft is at 281 with spaces, it doesn't matter that it's 240 without. Twitter is rejecting it.

Without spaces is mostly a typesetting and editing metric. Designers use it to estimate how a paragraph fits in a fixed text frame. Translators use it to price work (most pricing is per 1,000 characters without spaces, sometimes called "per CWS"). Editors use it to measure information density. It has no role in platform compliance.

One more useful pairing: letter count versus character count. "Count letters" specifically usually means alphabetic characters only. No digits, no punctuation, no spaces. Some counters expose this as a third number. It's mostly useful for puzzle and language analysis and almost never matches a platform cap.

The Unicode trap β€” why "cafΓ©" is 4 characters, not 5

The word cafΓ© looks like four characters to a reader. A naive byte counter would call it five. Because Γ© in UTF-8 takes two bytes. A code-point counter would call it four. A grapheme counter would also call it four. All three are technically correct for different definitions.

The trap shows up with combining characters. The single character Γ© can be stored two different ways:

  • Precomposed: the single Unicode code point U+00E9. One code point, one byte sequence, one grapheme.
  • Decomposed: the letter e (U+0065) plus the combining acute accent (U+0301). Two code points that render as one grapheme.

Both render identically on screen. A counter that counts code points calls the first form one character and the second form two. The fix is Unicode normalization (NFC) before counting. Collapse decomposed sequences into their precomposed equivalents.

This isn't theoretical. macOS stores filenames in decomposed form (NFD). Copy a filename containing Γ© from Finder into a counter that doesn't normalize, and the count jumps. Hand-typed accented text from a keyboard layout is usually precomposed; pasted text from elsewhere often isn't.

Emojis and graphemes β€” why "πŸ‘¨β€πŸ‘©β€πŸ‘§β€πŸ‘¦" can count as 1, 4, or 11

The family emoji is the canonical example of why naive counting fails. Depending on what's being counted, the answer is:

  • 1. What a reader sees on screen (one grapheme cluster).
  • 4. The individual person emojis joined together, ignoring the joiners (sometimes reported by code-point counters that strip zero-width characters).
  • 7. The full Unicode code point count (four people + three zero-width joiners).
  • 11. The UTF-16 code unit count, which is what JavaScript's "πŸ‘¨β€πŸ‘©β€πŸ‘§β€πŸ‘¦".length returns by default.
  • 25. The UTF-8 byte count.

Twitter counts this as 1. iOS Messages counts it as 1. A WordPress meta description box might count it as 11. Twilio bills SMS by GSM-7 versus UCS-2 segments, where this emoji forces UCS-2 and pushes the limit down from 160 to 70. And the emoji itself eats 4 of those 70.

Flag emojis (πŸ‡ΊπŸ‡Έ, πŸ‡«πŸ‡·, πŸ‡―πŸ‡΅) are another trap. Every flag is built from two regional indicator code points. A counter that doesn't segment by grapheme will call πŸ‡ΊπŸ‡Έ two characters. Twitter calls it one.

The TextKit Character Counter uses the Intl.Segmenter API where available, which counts grapheme clusters the same way every major platform does. The number it shows is the number Twitter shows.

One paste, the right number. The Character Counter reports with spaces, without spaces, grapheme clusters, and bytes. And matches Twitter, SMS, and meta-description limits in real time. Runs locally in the browser; your text never leaves the device.

Counting characters in code

Every language disagrees about what length means. The default behavior across the four most common backends:

LanguageDefault length countsFamily emoji result
JavaScriptUTF-16 code units11
Python 3Unicode code points7
SwiftGrapheme clusters1
JavaUTF-16 code units11
GoUTF-8 bytes (via len())25
RustUTF-8 bytes (via .len())25

The takeaway: only Swift gets the human-reader answer by default. Everywhere else, count characters the way users count them by going through a grapheme segmenter. Intl.Segmenter in modern JavaScript, the grapheme module in Python, BreakIterator in Java, the unicode-segmentation crate in Rust. "abc".length works fine until somebody pastes an emoji. Then it doesn't.

The five workflows that need character counts

  1. Writing tweets. The 280-character ceiling is the most-checked number on the internet. The drafting loop is: write, count, cut, count, post. A real-time counter under the textbox replaces the cut-and-retry cycle.
  2. Meta descriptions. Google truncates SERP snippets around 155-160 characters on desktop and around 120 on mobile. The discipline is writing to ~155, with the most important clause front-loaded so the truncation, if it happens, doesn't kill the meaning.
  3. SMS marketing. A campaign that fits in 160 characters costs one segment per recipient. A campaign at 161 costs two. Every recipient, doubled. The sms character count matters more than any other limit because the cost scales linearly.
  4. SEO titles. Google's title display caps around 50-60 characters before truncation. CMSes that count without a live indicator make it easy to draft a 70-character title that displays as "How to bake the perfect sourdough loaf at h…" in search results.
  5. Ad copy. The character count for ads is the strictest of any field. Character count Google Ads RSA headlines is exactly 30. Not 31, not "around 30," exactly 30. Drafting at 30 with three or four variants per headline slot is the standard workflow.

The compounding payoff: a writer who internalizes the five numbers (280, 160, 155, 30, 60) writes inside the limits without thinking about them. A counter is training wheels. The numbers are the muscle memory.

Counting characters in spreadsheets

Both Excel and Google Sheets expose the same function. It's the fastest way to get a character count across hundreds of rows without leaving the spreadsheet.

TaskExcel / Google Sheets formula
Character count of cell A1 (with spaces)=LEN(A1)
Character count without spaces=LEN(SUBSTITUTE(A1," ",""))
Count specific character (e.g., commas) in A1=LEN(A1)-LEN(SUBSTITUTE(A1,",",""))
Total characters across a column A1:A100=SUMPRODUCT(LEN(A1:A100))
Conditional formatting flag: over 280 chars=LEN(A1)>280 in a rule

Notion has the same length() method inside formula properties. Airtable uses LEN() identically. None of them count grapheme clusters. A flag emoji still reports as 2, and the family emoji still reports somewhere between 4 and 11 depending on internal encoding. For prose, this rarely matters. For social-media post audits, it matters a lot.

Browser vs. server vs. word processor β€” three places to count

Character counting can happen in three places, and each has a different trade-off.

WhereBest forPrivacySpeed
Browser (JS + Intl.Segmenter)Drafting tweets, captions, ad copy, SEO snippetsBest. Nothing leaves the deviceReal-time, sub-millisecond
Word processor (Word, Pages, Docs)Long-form drafts, articles, manuscriptsDepends on the app's cloud settingBuilt-in, but doesn't segment graphemes
Server (paid API)Bulk validation of thousands of social postsWorst. Text leaves your controlNetwork-bound

For drafting. The workflow where the count is needed at the moment a sentence is being shaped. The browser is the right tool. A character count online counter beats Word's built-in count for two reasons: Word counts code units (so emojis inflate the number) and Word doesn't show a live limit indicator for Twitter, SMS, or ad copy. The TextKit Character Counter shows all of them simultaneously.

For long-form writing, where the metric is words rather than characters, see the Word Counter and the companion piece Blog Post Length: How Many Words in 2026. For the broader category of in-browser text utilities. The case for tools that count, transform, and analyze without uploading anything. See Text Tools for the AI Era. And for the specific problem of taming AI-generated copy that's three times the length you asked for, Format ChatGPT Output for Production covers the post-processing workflow.

Frequently asked questions

How many characters is a tweet?

Free X (Twitter) accounts are still capped at 280 characters per post. X Premium subscribers can publish up to 25,000 characters, but anything past 280 collapses into a "Show more" expand. The first 280 are the only ones the timeline shows by default, so for engagement the 280-character limit still applies in practice.

Does a character count include spaces?

Most counters report both. Spaces count as characters in every platform limit that matters. Twitter, SMS, meta descriptions, ad headlines, Instagram captions. "Characters without spaces" is mostly useful for typesetting estimates and word-rate calculations, not for hitting a platform cap.

How do I count characters in Excel or Google Sheets?

Both use the same function: =LEN(A1) returns the character count of the cell. To count without spaces, use =LEN(SUBSTITUTE(A1, " ", "")). Notion has the same LEN function inside formula properties. None of them count grapheme clusters correctly. A flag emoji still reports as 2 to 4.

Why does my character count differ between tools?

Three reasons. The tool may count UTF-16 code units (JavaScript's default) instead of Unicode code points. It may or may not normalize accented characters into a single code point. And it almost certainly doesn't count grapheme clusters the way a human reader would. A counter that reports the same number Twitter does is using grapheme segmentation; one that reports a higher number on emoji-heavy text is using raw code units.

What is a grapheme cluster?

A grapheme cluster is what a human reads as a single character. Even when the underlying text is made of multiple code points. The family emoji πŸ‘¨β€πŸ‘©β€πŸ‘§β€πŸ‘¦ is one grapheme cluster but seven code points joined by zero-width joiners. Flag emojis are one grapheme cluster but two regional-indicator code points. Twitter, iOS, and Android all count by grapheme cluster. Naive counters don't.

Is there a maximum character count for an SMS message?

A single SMS segment is 160 characters in GSM-7 encoding (plain ASCII plus a small extended set) or 70 characters in UCS-2 (anything with an emoji or non-Latin script). Longer messages get split into concatenated segments with a small header overhead, dropping the per-segment ceiling to 153 (GSM-7) or 67 (UCS-2). Carriers charge per segment, not per message.

Keep reading

Written by . We build the tools we write about. Try the Character Counter used in this post.