# Twitter/X Character Limit Counter

Count X (Twitter) characters using the platform's weighted rules: emoji and CJK cost two, every link a flat 23.

---

- **Canonical URL:** https://dothecalculation.com/calculators/twitter-character-limit-calculator
- **Category:** Everyday utilities
- **Publisher:** Do The Calculation (https://dothecalculation.com)
- **Cost:** Free, no account or sign-up required
- **Privacy:** Runs entirely in the browser; inputs are never sent to a server
- **Methodology:** https://dothecalculation.com/methodology

---

## Count X (Twitter) Characters the Way X Counts Them

The weighted count, not the character count. Emoji and CJK cost two, every link costs a flat 23, and the text is normalised before any of it is measured.

- Implements the published twitter-text weighting rules, not a naive length check
- Every URL charged at 23 regardless of how long it really is
- Shows how many posts a long draft would need as a thread

## 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.

## How to Use This Counter: Checking a Post With a Link

Paste the draft into the box. Take a typical announcement post: 54 characters of text followed by a full article URL 67 characters long, ending in a long calculator slug.

Raw, that string is 165 characters — well inside 280 by naive counting, but that is not the number that matters. The counter finds one URL, values it at **23** instead of 67, and weighs everything else at 1 each. The result is **121 weighted characters** with **159 remaining**, and the link alone accounts for a **44-character saving** against its raw length.

That saving is why link-shorteners are pointless on X. A shortened link and a 200-character link cost exactly the same 23. Shortening only costs you the readable domain in the preview and, if you route through a third-party shortener, a layer of click tracking that some readers will not follow.

The counter reports the raw JavaScript string length alongside the weighted count, which is how you spot the gap. For that announcement post the two are 165 and 121. For a post full of emoji they diverge the other way: a 54-code-point message with three emoji reads **57 weighted** because each emoji is charged twice.

## A Second Example: Emoji, CJK and a Thread

Take a short launch post with three emoji: 54 code points of mixed Latin and emoji. The counter returns **57 weighted characters**, **223 remaining**, and flags **3 weight-two characters**. Three emoji cost six units, so the visible length understates the charged length by three.

Now the other extreme. Twelve Japanese characters read as **24 weighted** — every one of them sits outside the demoted ranges and is charged double. A Japanese post therefore hits the limit at 140 characters, which is why the platform's effective capacity varies so much by language. The same is true of Korean Hangul, Chinese, and a long list of other scripts.

When a draft does exceed the limit, the counter reports how many posts it would take as a thread: weighted length divided by the limit, rounded up. That is a floor rather than a plan, because splitting mid-sentence is worse than splitting a little early, and each part of a real thread carries its own numbering and context. Treat the number as "at least this many" and write the breaks deliberately.

For longer-form drafts that will not fit any thread comfortably, the [word counter calculator](/calculators/word-counter-calculator) gives the word and reading-time view, and the [readability score calculator](/calculators/readability-score-calculator) checks whether the compression has pushed the sentences past what a scrolling reader will parse.

## What the Limits Actually Are

The 280 figure applies to a standard post. Other surfaces on the platform have their own ceilings, and they do not all use the same counting rules: the bio, the display name, the direct message field and the alt-text field are each capped separately. Premium subscribers can post far longer text than 280 characters, which makes the counter a check on whether a post will display in full to everyone rather than a hard gate.

Some things attached to a post are free. Images, video, GIFs, polls and quoted posts do not consume characters from the text budget. Hashtags and @mentions typed into the body do — they are ordinary text, weighted like anything else, so a post with four long hashtags has meaningfully less room than it looks.

One inherited quirk worth knowing: the demoted range U+0000–U+10FF is generous enough to include Latin, Greek, Cyrillic, Hebrew, Arabic and Armenian, so posts in those scripts get the full 280. The cut at U+1100 is where Hangul Jamo begins, and everything from there upward is charged double. That boundary is a decision about which scripts are dense rather than a statement about their character count, and it is the single most surprising thing in the specification.

If you are drafting placeholder copy at a target length before writing the real thing, the [Lorem Ipsum generator](/calculators/lorem-ipsum-generator) will produce text of an exact character count to test the layout against.

## Limitations

This counter implements the published weighting configuration, which is the same specification the platform's own twitter-text library uses. It is an accurate model of the rules, not a live connection to the platform, so if the configuration changes — as it has before — this page reflects the version documented today rather than whatever shipped this morning. Treat a result within a couple of characters of the limit as worth double-checking in the compose box.

URL detection is the piece most likely to disagree at the margins. This page recognises anything beginning with http://, https:// or www. as a link. The platform's own detector is broader and will treat some bare domains as links too, which means a post containing something like "example.com" may be charged 23 there and counted literally here. Where the two disagree, the platform is charging more, not less.

Emoji sequences are the other soft edge. A single visible emoji is sometimes several code points joined by zero-width joiners — a family, a flag, a skin-tone variant — and each of those code points carries its own weight. This counter weighs them individually, which matches the specification, but it means one glyph on screen can cost six or eight units. If your draft leans on composite emoji, expect the charged length to run above what the emoji count suggests.

Finally, the thread estimate is arithmetic, not editing. It divides the weighted length by the limit and rounds up. Real threads need room for numbering, for a hook in the first post, and for breaks that fall at sentence boundaries, so the number of posts you actually write is usually one or two more than the floor.

## Related Calculators

The [Word Counter Calculator](/calculators/word-counter-calculator) covers the word, sentence and reading-time view of a draft, which is the measure that matters once text leaves a character-capped field. The [Flesch-Kincaid & Gunning Fog Readability Score Calculator](/calculators/readability-score-calculator) checks whether compressing a message into 280 characters has made it harder to read rather than tighter. The [Lorem Ipsum Generator](/calculators/lorem-ipsum-generator) produces filler of an exact character count for testing any capped field, and the [Social Media Engagement Calculator](/calculators/social-engagement-calculator) measures how the posts you publish actually perform.

## Frequently asked questions

### What is the X (Twitter) character limit?

280 units of weighted length for a standard post. Because ordinary Latin text weighs 1 per character, that is 280 characters of English. Emoji and most non-Latin scripts weigh 2, so a Japanese post hits the limit at 140 characters and a post with five emoji at 275.

### Do emoji count as one character or two?

Two. Emoji fall outside the four Unicode ranges the platform demotes to weight 1, so each code point is charged double. Three rocket emoji read as three characters and count as six. Composite emoji built from several joined code points cost more still.

### How many characters does a link use?

A flat 23, whatever its real length, because links are rewritten through the t.co wrapper. A 67-character article URL costs 23 and saves you 44 characters against its raw length. This is why URL shorteners buy you nothing on X.

### Do hashtags and mentions count toward the limit?

Yes. Both are ordinary text and are weighted like any other characters. Four long hashtags can quietly take 60 characters out of your budget. Images, video, GIFs, polls and quoted posts are free and do not consume any of the 280.

### Why does my post count differently than I expect?

Almost always one of three things: an emoji or non-Latin character being charged double, a link being valued at 23 rather than its real length, or NFC normalisation collapsing an accented character written as a base plus a combining mark. This counter shows the raw string length alongside the weighted count so you can see which is happening.

### How many characters can Japanese or Chinese posts use?

About 140. CJK characters sit above the U+1100 boundary where the demoted weight-1 ranges end, so every one is charged 2. The same applies to Korean Hangul. Latin, Greek, Cyrillic, Hebrew, Arabic and Armenian all fall inside the weight-1 ranges and get the full 280.

### How do I know how many posts my thread will need?

Divide the weighted length by 280 and round up — this page does that for you. Treat it as a floor rather than a plan: real threads need room for numbering and for breaks that land at sentence boundaries, so you will usually write one or two posts more than the arithmetic suggests.

### Is this the same counting the platform uses?

It implements the same published configuration: default weight 2, weight 1 for U+0000–U+10FF, U+2000–U+200D, U+2010–U+201F and U+2032–U+2037, NFC normalisation first, and 23 per URL. It is a model of the specification rather than a live connection, so a draft sitting within a character or two of the limit is worth confirming in the compose box.

## Related concepts

- **Weighted Character Count** — A length measure where different characters cost different amounts. X assigns weight 1 to four Unicode ranges covering most alphabetic scripts and weight 2 to everything else, capping a post at 280 units of weight.
- **NFC Normalisation** — Unicode Normalization Form C combines a base letter and a combining mark into a single precomposed character where one exists. Applying it before counting stops an accented letter costing two characters instead of one.
- **t.co Link Wrapping** — Every link posted to X is rewritten through the platform's own wrapper, so all URLs occupy the same fixed 23 characters regardless of their original length.

## Related guides

- [Word Count and Readability: How Text Metrics Work](https://dothecalculation.com/blog/utility/word-counter-readability-guide) — Understand how DTC counts words, characters, sentences, paragraphs, reading time, keyword frequency, and estimated Flesch Reading Ease.
- [How to Use Do The Calculation Calculators: A Practical Step-by-Step Guide](https://dothecalculation.com/blog/site-guides/how-to-use-calculators) — Learn the fastest reliable workflow for using Do The Calculation calculators, reading results, checking formulas, and using save, print, share, and export actions correctly.

## Related calculators

- [Lorem Ipsum Generator](https://dothecalculation.com/calculators/lorem-ipsum-generator) — Generate Lorem Ipsum placeholder text by paragraph, sentence, word or exact character count, with live word and byte totals.
- [Word Counter Calculator](https://dothecalculation.com/calculators/word-counter-calculator) — Count words, characters, sentences, and paragraphs in real-time, estimate reading times, and analyze word density/readability.
- [Anagram & Scramble Word Solver](https://dothecalculation.com/calculators/anagram-solver) — Detect if two words are anagrams of each other, generate all letter permutations, and analyze character frequency with a sorted histogram.
- [Password Generator](https://dothecalculation.com/calculators/password-calculator) — Generate strong, secure passwords instantly with custom length, symbols, numbers, and character rules, completely free to use.
- [Binary to Text & ASCII Translator](https://dothecalculation.com/calculators/binary-translator-calculator) — Translate binary code to readable ASCII text and vice versa, with a full bit-grid visualization showing each character encoding.
- [Date Calculator](https://dothecalculation.com/calculators/date-calculator) — Calculate the exact difference between two dates or quickly add and subtract days, weeks, months, and years from any date.

---

_This counter implements the weighting rules published in X's twitter-text configuration: default weight 2, weight 1 for four specified Unicode ranges, NFC normalisation before measurement, and a flat 23 characters per URL. Every figure quoted in the copy was produced by running that implementation rather than estimated. It models the specification rather than connecting to the platform, so a draft within a character or two of the limit is worth confirming in the compose box, and URL detection here is narrower than the platform's own._

---

_Source: [Do The Calculation](https://dothecalculation.com/calculators/twitter-character-limit-calculator). Quote freely with attribution and a link to this page._
