How to use it
- Paste or type the text into Text. The counts update as you type.
- Read Characters (graphemes) for the length a reader sees, and Code points for the Unicode count.
- Read UTF-8 bytes for the size of a web page or a file in the usual encoding.
- In Limits, check the SMS and X rows: Left is the room in the last part or post.
Characters, code points and graphemes
A code point is one number in the Unicode table. A character as a reader sees it is a grapheme cluster, and one grapheme can hold several code points: an e with a combining accent is two code points and one grapheme, and a family emoji joined by zero-width joiners is five code points and one grapheme.
The grapheme count uses the browser's segmenter, which follows the Unicode rules for grapheme clusters (UAX #29). Two of them: no break is made before an extending character or a zero-width joiner, and an emoji sequence or a pair of regional indicators stays together.
Bytes in UTF-8, UTF-16 and UTF-32
- UTF-8 uses 1 byte up to U+007F, 2 bytes up to U+07FF, 3 bytes up to U+FFFF and 4 bytes above that.
- UTF-16 uses one 16-bit unit for most code points. A code point above U+FFFF takes two units, a surrogate pair, which is 4 bytes.
- UTF-32 uses exactly 4 bytes for every code point.
SMS limits
A message written only with the GSM 7-bit characters fits 160 characters in one SMS. When it is longer, each part holds 153 characters, because part of the 140-byte payload is used for the header. The characters of the extension table (form feed, ^ { } \ [ ~ ] | and the euro sign) take two positions each.
A message with any character outside GSM-7 is sent in UCS-2, which holds 70 characters in one SMS and 67 in each part of a longer one. This tool counts ş, ğ, ı, İ, ç and Ç as outside GSM-7, which is the stricter count for Turkish text.
- The GSM-7 table and the extension table come from Wikipedia's GSM 03.38 article; the standard itself is 3GPP TS 23.038, Alphabets and language-specific information.
- The 153 and 67 figures are given on Wikipedia's SMS article, which cites the 3GPP standard for the 160 and 70 figures.
X post length
X counts a post out of 280 weighted characters. Most characters weigh 1; emoji and CJK characters weigh 2. A link counts 23, whatever its length. The weight ranges are the ones in X's twitter-text configuration (version 3); X's counting page gives the same rules in words.
The tool finds links that start with http:// or https://. A link written without the scheme is counted as ordinary text, so a post with one may be counted longer than X counts it.
Worked example: Hello, world! Café 👋
The text has 20 characters, which are also 20 code points. The emoji is one code point but two UTF-16 units, so the string length is 21. The UTF-8 size is 24 bytes: 17 for the ASCII letters, spaces and punctuation, 2 for é, 1 for the space between the words, and 4 for the emoji. The UTF-16 size is 21 × 2 = 42 bytes, and the UTF-32 size is 20 × 4 = 80 bytes.
| Measure | Value |
|---|---|
| Characters (graphemes) | 20 |
| UTF-16 code units | 21 |
| UTF-8 bytes | 24 |
| UTF-16 bytes | 42 |
| UTF-32 bytes | 80 |
| SMS, UCS-2: one message | 21 of 70, 49 left |
| X post | 21 of 280, 259 left |
Frequently asked questions
Why does an emoji count as one character here but two units in UTF-16?
An emoji outside the Basic Multilingual Plane needs two 16-bit code units, a surrogate pair. A reader still sees one character, so the grapheme count is one, while the UTF-16 length is two.
Why does a Turkish text use more SMS characters than an English one?
The letters ş, ğ, ı, İ, ç and Ç are outside the GSM-7 alphabet, so one of them makes the whole message UCS-2. A UCS-2 SMS holds 70 characters instead of 160.
Why is the X count higher than the number of characters I see?
X weights emoji and Chinese, Japanese and Korean characters as two, and it counts each link as 23 characters. The count shown here follows the same weights.
Are the SMS and X limits exact for every carrier or platform?
They follow the standard and X's published weights. A carrier may still split or charge a message differently, and the tool does not check links written without http or https.
Is my text sent anywhere?
No. The counts run in your browser. The text is not stored and is not sent to the site.
Sources
- Wikipedia (English): SMS, message lengths and the 153 and 67 figures
- Wikipedia (English): GSM 03.38, the GSM 7-bit basic and extension tables
- 3GPP TS 23.038: Alphabets and language-specific information
- Wikipedia (English): UTF-8, bytes per code point
- Wikipedia (English): UTF-16, code units and surrogate pairs
- Wikipedia (English): UTF-32, fixed width
- Unicode UAX #29: Unicode text segmentation, grapheme clusters (revision 49)
- X: Counting characters (post length and weights)
- twitter-text, config/v3.json: the weight ranges X uses
Figures and text last checked on Tuesday, November 10, 2026.