
Last checked by the TextEditor.com team
What counts as one character?
Ask three programs how long "Zoë 👍🏽" is and you can get three different answers. Each one follows its own rule. A person sees five characters: Z, o, ë, a space and a thumbs up. The computer stores more than that.
Unicode gives every character a number, called a code point. The thumbs up with a skin tone is two code points: the hand, then the color. Many apps keep text in UTF-16, where a common letter takes one unit and most emoji take two. Files and web pages use UTF-8, where one character takes 1 to 4 bytes.
The big number in the tool is what you see. Unicode calls it a grapheme cluster. The tiles show the other counts, so you can match the number a form or an app is using.
| You see | Code points | UTF-16 units | UTF-8 bytes | X counts | In an SMS |
|---|---|---|---|---|---|
| Z | 1 | 1 | 1 | 1 | 1 |
| o | 1 | 1 | 1 | 1 | 1 |
| ë | 1 | 1 | 2 | 1 | UCS-2 |
| ␣ | 1 | 1 | 1 | 1 | 1 |
| 👍🏽 | 2 | 4 | 8 | 2 | UCS-2 |
| ␣ | 1 | 1 | 1 | 1 | 1 |
| 🇭🇺 | 2 | 4 | 8 | 2 | UCS-2 |
| ␣ | 1 | 1 | 1 | 1 | 1 |
| 1 | 1 | 1 | 1 | 1 | 1 |
| € | 1 | 1 | 3 | 2 | 2 |
| 10 in all | 12 | 16 | 27 | 13 | UCS-2, 16 of 70 |
With spaces or without?
Almost every limit counts spaces. X, Instagram, Bluesky and text messages all do. Microsoft Word shows both numbers, and some school tasks ask for the count without spaces.
A space is not only the space bar. Tabs, line breaks and the no-break space are spaces too, and the "Without spaces" tile leaves all of them out. A line break counts as one character here. A Windows file stores it as two, a carriage return plus a line feed, so a web form that checks the length on its server may count each break twice.
- 23 with spaces and line breaks
- 22 with spaces, line breaks left out
- 18 without any spaces or line breaks
- 24 with each line break counted as two, like a Windows file
Why an emoji can count as 2
UTF-16 was made when 65,536 numbers looked like enough for every character on Earth. Emoji arrived later and got numbers above that, so UTF-16 stores each of them as a pair of units. Code that asks for the length of a text in JavaScript or Java gets 2 for 😀.
Some emoji are built from parts. A skin tone is a second code point. A flag is two regional letters, so 🇭🇺 is H plus U. A family is four people glued together by an invisible joiner. You see one character, but it is 7 code points, 11 UTF-16 units and 25 bytes.
| Emoji | You see | Code points | UTF-16 units | UTF-8 bytes | X counts |
|---|---|---|---|---|---|
| 😀 | 1 | 1 | 2 | 4 | 2 |
| 👍🏽 | 1 | 2 | 4 | 8 | 2 |
| 🇭🇺 | 1 | 2 | 4 | 8 | 2 |
| ❤️ | 1 | 2 | 2 | 6 | 2 |
| 1️⃣ | 1 | 3 | 3 | 7 | 2 |
| 👨👩👧👦 | 1 | 7 | 11 | 25 | 2 |
Styled letters act the same way. The bold 𝐁 from a fancy text generator is one letter you see but two UTF-16 units, so an app that counts units fits only half as many of them. Accents can hide a cost too: é typed as an e plus a separate accent mark is one character you see and two code points.
Text messages: 160, 153, 70 or 67

A text message carries 140 bytes. Phones pack plain text into 7 bits per character, so 160 characters fit. The 7 bit set is the GSM 03.38 alphabet. It has the English letters, digits, common punctuation, some Greek capitals and a few accented letters such as é, è, ü, ñ and à.
Nine characters sit in an extension table and take two places each: ^ { } [ ] ~ \ | and €. Three euro signs use 6 of the 160.
One character outside the set switches the whole message to UCS-2, with 2 bytes per character. Then only 70 fit. The usual reasons are curly quotes and apostrophes, long dashes, the single character ellipsis, accented letters such as á, ç or ë, and emoji. Word processors and phone keyboards often type curly quotes for you, so a message can switch without you noticing.
A longer message is sent in parts. Each part gives up 6 bytes to a header that tells the phone how to join them, so a part holds 153 plain characters, or 67 in UCS-2. An emoji or a two place character is never cut in half, so a part can hold one less. Many senders pay for each part.
UCS-2, 1 part: 66 of 70 used. Forced by ’ (curly apostrophe). With plain punctuation it would use 66 of 160.
- Part 1, 66 of 70Running 10 min late, sorry! Start without me. I’ll bring the cake.
How X counts a post
X does not count what you see. Its counting rules give each character a weight. Latin, Greek, Cyrillic, Arabic, Hebrew, Hindi and Thai letters weigh 1, and so do digits and common punctuation. Chinese, Japanese and Korean characters weigh 2, and so does every emoji, however many parts it has. The limit is 280, so a post in Japanese holds about 140 characters.
Every link counts as 23, because X wraps it in a short t.co link. A short web address and a very long one cost the same. The euro sign weighs 2, since it sits outside the ranges that weigh 1. X also joins an e and a separate accent mark into é before it counts, so that pair costs only 1.
X Premium raises the limit to 25,000 for the writer. The @names that X adds at the start of a reply do not count. Names you type yourself do.
Character limits by platform
We checked each limit in the app's own help pages or developer docs in November 2026. Apps change these numbers, so check the date in the Limits panel before a big launch.
| Where | Limit | How it is counted |
|---|---|---|
| X post | 280, or 25,000 with X Premium | Weights: most emoji and Chinese, Japanese or Korean characters count 2, each link 23 |
| Bluesky post | 300 | Characters you see, and also no more than 3,000 bytes |
| Instagram caption | 2,200 | Not published |
| Instagram bio | 150 | Not published |
| TikTok caption from a posting app | 2,200 | UTF-16 units, so most emoji count 2 |
| YouTube title | 100 | Not published |
| YouTube description | 5,000 | Not published |
| LinkedIn post | 3,000 | Not published |
| Discord message | 2,000, or 4,000 with Nitro | Not published |
| Text message | 160 plain, 70 with any special character | 153 or 67 per part when it is split |
| Google title | No fixed limit | Cut to fit the screen. Many sites aim for 50 to 60. |
| Google meta description | No fixed limit | Cut to fit the screen. Many sites aim for about 155. |
Where an app does not say how it counts emoji, the meters use the characters you see. If your text has emoji or styled letters, leave a few characters spare. Need a word or emoji many times, sized to fit one message? The text repeater sets the count for you.
What "length" means in code, Word and Google Docs
| Where | What it counts | 👍🏽 | é as e + accent |
|---|---|---|---|
s.length in JavaScript | UTF-16 units | 4 | 2 |
s.length() in Java | UTF-16 units | 4 | 2 |
len(s) in Python | Code points | 2 | 2 |
mb_strlen($s) in PHP | Code points | 2 | 2 |
strlen($s) in PHP | UTF-8 bytes | 8 | 3 |
| This page | Characters you see | 1 | 1 |
In Microsoft Word, open Review, then Word Count, or press Ctrl+Shift+G. It shows characters with and without spaces. In Google Docs, open Tools, then Word count, or press Ctrl+Shift+C.
For words, sentences and reading time, use the word counter. To find characters you cannot see, such as a zero width space that adds to your count, use the invisible character page.