Guide
How X (Twitter) Counts Characters
The 280 on X isn't 280 letters. It's 280 weighted units, and once you know the weights, posts stop mysteriously going over.
Twit'n'Go · · 2-minute read
Short answer
X counts weighted characters: code points in a few ranges (most Latin, Greek, Cyrillic, Hebrew, Arabic and common punctuation) count 1, everything else including emoji and CJK counts 2, any link counts 23, and text is NFC-normalized first; the limit is 280.
Key takeaways
- Limit: 280 weighted characters for a standard post.
- Weight 1: code points U+0000 to U+10FF plus some general punctuation (dashes, curly quotes, primes).
- Weight 2: everything else, including emoji (however complex), Chinese, Japanese and Korean.
- Every link: 23, because X wraps it with t.co.
Jump to a section
What are the weights?
X gives each character a weight of 1 or 2, and a post can hold 280 units. The light ranges, from X's open-source configuration, are:
| Code points | What's in there | Weight |
|---|---|---|
| U+0000 to U+10FF | Latin, Greek, Cyrillic, Armenian, Hebrew, Arabic, Indic scripts, Thai, Georgian and more | 1 |
| U+2000 to U+200D | Spaces of various widths | 1 |
| U+2010 to U+201F | Hyphens, dashes, curly quotes | 1 |
| U+2032 to U+2037 | Prime marks | 1 |
| Everything else | Emoji, CJK, Hangul, the ellipsis …, most symbols | 2 |
So 140 Japanese characters fill a post, and so do 140 emoji.
Why is every link 23?
X replaces every link with a t.co short link and counts that length, 23, regardless of the original. A 300-character URL and x.com cost the same. That's also why stripping tracking parameters doesn't save space on X; it's still worth doing for privacy, which the link cleaner handles.
What's NFC normalization?
Before counting, X converts text to Unicode Normalization Form C, where a letter and its accent become one character where possible. "café" can be typed as four code points or as five (e followed by a combining accent). After NFC both are four, so both count 4.
What surprises people?
- The ellipsis.
…(U+2026) isn't in the light ranges, so it counts 2. - The em dash.
—(U+2014) is in the light range and counts 1. - Emoji with variation selectors.
❤️is a heart plus an invisible selector; it still counts 2 as one emoji. - Bare domains.
example.comin your text is detected as a link and counts 23, even withouthttps://.
How can I check a post?
Paste it into the composer. It applies these rules, shows the count in a ring and highlights whatever goes past 280. For longer pieces the thread splitter uses the same counting to make every part fit.
FAQ
Do @mentions count?
Mentions you type count like normal text. When you reply, the handles X adds automatically at the start of the reply don't count.
Do images and videos use characters?
No. Media attached through X's apps doesn't take any of the 280.
Why does a flag emoji count 2 if it's two code points?
X counts each emoji as 2 whatever it's made of: flags, skin tones and family sequences joined with zero-width joiners all count 2.