Guide

How X counts characters (and why fancy text costs more)

Short answer

X counts a post by weight. Characters in a few ranges (basic Latin through Georgian and Korean jamo, U+0000 to U+10FF, plus some spaces, dashes, quotes and primes) count as one. Everything else counts as two. An emoji counts as two however many code points it uses, and every link counts as 23. A standard post can weigh up to 280. These rules come from X's open-source twitter-text library.

Key points

  • Latin, Greek, Cyrillic, Arabic, Hebrew, Thai and accented letters count as 1.
  • Chinese, Japanese, Korean syllables, emoji and most symbols count as 2.
  • Mathematical bold, italic and script letters count as 2, so styled text halves your space.
  • Every link counts as 23, however long or short.
  • Text is normalized first, so é typed as e plus an accent still counts as 1.

What is "weighted" counting?

Instead of adding one per character, X adds a weight: 1 for characters in certain ranges, 2 for everything else, and caps the total at 280.

The open-source twitter-text library publishes the exact settings. In configuration version 3, the default weight is 200 and the scale is 100 (so 2 characters), with four ranges marked as weight 100 (1 character):

Range What's in it
U+0000 to U+10FF Basic Latin, Latin-1, Latin Extended, IPA, Greek, Cyrillic, Armenian, Hebrew, Arabic, Devanagari and other South Asian scripts, Thai, Lao, Tibetan, Myanmar, Georgian
U+2000 to U+200D Assorted spaces, zero-width joiner
U+2010 to U+201F Hyphens, en and em dashes, curly quotation marks
U+2032 to U+2037 Prime marks (′ ″)

Anything outside these ranges counts double: Korean syllables, Chinese and Japanese characters, the ellipsis character …, bullets •, arrows, maths symbols, and every fancy alphabet.

How are emoji counted?

Each emoji counts as two, even if it's made of several code points.

A family emoji like 👨‍👩‍👧‍👦 is seven code points under the hood (four people joined by three zero-width joiners). A thumbs up with a skin tone is two. A flag is two regional indicator letters. twitter-text recognises these sequences and charges two for the whole thing, so you don't pay extra for skin tones or combined emoji.

Because X wraps every link in its t.co shortener, and the counting rule uses the length of that wrapped link.

It doesn't matter whether you paste a short domain or a long URL with tracking parameters. Bare domains that X recognises, like example.com, are linked and counted the same way. Practical effect: shortening a link yourself saves nothing, and removing tracking parameters is purely for tidiness.

Why does fancy text fill a post so fast?

The styled alphabets live in the Mathematical Alphanumeric Symbols block (U+1D400 and up), far outside the light ranges.

So 𝐛𝐨𝐥𝐝 costs 8, not 4. A 150-letter sentence in bold weighs 300 and won't fit. Bubble letters (U+24B6 and up), full-width letters and squared letters are in the same position. Upside-down text is the exception: its lowercase letters come from the IPA block below U+1100, so a flipped post usually costs the same as the original. See the counter to check any post, with double-weight characters highlighted.

Does normalization matter?

Yes. X normalizes text to NFC before counting, which merges a letter and its accent into one character where possible.

If your keyboard produces "e" followed by a combining accent, it still counts as one é. But marks with no precomposed form, like the stacked accents in glitch text, each count separately (as one each, since combining marks sit in the light range).

A quick checklist before posting styled text

  • [ ] Run the post through a weighted counter, not a plain one.
  • [ ] Keep links, @mentions and hashtags in plain letters.
  • [ ] Use … sparingly: three full stops cost more but are clearer to screen readers anyway.
  • [ ] If it's over, convert the styled words back to plain before cutting content.

Questions people ask

Is the limit still 280 characters?

For a standard post, yes. Accounts with X Premium can post longer posts; X's help center gives the limit as up to 25,000 characters. Display names allow up to 50 characters and bios up to 160.

Why do Japanese posts seem to fit so much more in 140 characters?

When the limit rose to 280 in 2017, the weighting kept the effective limit for Chinese, Japanese and Korean at 140 characters, because each of those characters carries more meaning than a Latin letter. That's why they count as two.

Do spaces and line breaks count?

Yes, each counts as one. A blank line between paragraphs costs two characters (two line breaks).

Sources

  1. twitter-text configuration v3 (GitHub)
  2. twitter-text parsing documentation
  3. X Help Center: X Premium how-to (longer posts)