Quick Answer — Why Your 280-Character Post Is Too Long
X does not count characters. It counts weight. The published configuration gives every character a default weight of 2, then demotes four Unicode ranges to weight 1: U+0000–U+10FF, U+2000–U+200D, U+2010–U+201F and U+2032–U+2037. The limit is 280 units of weight, not 280 characters. Ordinary Latin text falls inside the demoted ranges, so it costs 1 each and 280 characters fit exactly. Anything outside them costs double.
Two other rules change the arithmetic before weighting even begins. Text is normalised to Unicode NFC first, so an accented letter written as a base plus a combining mark collapses to one character. And every URL is replaced by a flat 23 characters, whatever its real length, because links are rewritten through the t.co wrapper.
What that does to real drafts, measured on this page:
- 280 plain Latin characters — 280 weighted, 0 remaining, fits
- Three rocket emoji — 3 characters on screen, 6 weighted
- Six CJK characters — 6 on screen, 12 weighted
- A 67-character link plus 54 characters of text — 121 weighted, not 121 raw; the link saves 44
- "café" written with a combining accent — 4 weighted, not 5
The practical consequence is that a post in Japanese has an effective limit of 140 characters, and a post with five emoji has an effective limit of 275.