Character and Byte Counter

Paste text to see its length as a reader sees it, in code points and in bytes, and whether it fits one SMS or an X post.

Free Runs in your browser Checked Tuesday, November 10, 2026

Paste or type the text. Everything is counted in your browser; the text is not sent anywhere.

Result

Characters (graphemes) — What a reader sees: an emoji with a skin tone or a flag counts once.
Code points — Unicode code points: each emoji counts once here.
UTF-16 code units — The length JavaScript and Java report for a string. An emoji takes two.
UTF-8 bytes — Size in the encoding most web pages and files use.
UTF-16 bytes —
UTF-32 bytes —
SMS alphabet —
Limits

This tool runs in your browser. What you enter is not sent to us.

How to use it

  1. Paste or type the text into Text. The counts update as you type.
  2. Read Characters (graphemes) for the length a reader sees, and Code points for the Unicode count.
  3. Read UTF-8 bytes for the size of a web page or a file in the usual encoding.
  4. 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

Figures and text last checked on Tuesday, November 10, 2026.

We use necessary cookies to run the site. With your consent, Google also uses advertising cookies to show personalised ads. If you reject them, you still see ads, but they are not personalised.