Why character counts differ between apps
Counting characters sounds trivial until emoji and accented letters show up. What looks like one character on screen can be several units in memory: 👍🏽 is two Unicode code points and four UTF-16 code units, and the family emoji 👨👩👧 is five code points joined together. Different systems count different units, which is why a post can fit in one app and be "too long" in another.
This counter shows each measure side by side. Characters are grapheme clusters — what a person would call a character, so every emoji counts as one. UTF-16 code units are what JavaScript's .length returns and what many form maxlength attributes enforce. Code points match Python's len() and PHP's mb_strlen(). UTF-8 bytes matter for database columns, HTTP headers and APIs that limit size in bytes.
The limit meters check your text against the places writers and marketers hit limits most often: SEO titles and meta descriptions, X (Twitter) posts, SMS messages, Instagram captions and YouTube titles, plus a custom limit of your own.
How to use the Character Counter
- Type or paste your text. Click Sample to load an example post with emoji and a link.
- Read the character, word and line counts under the text box; the table below adds code units, code points and UTF-8 bytes.
- Check the meters on the right: the bar turns amber near a limit and red when you are over it.
- For SMS, see whether the message is GSM-7 or UCS-2 and how many segments it will be billed as. Characters that force UCS-2 are listed so you can replace them.
- Set a custom limit (for example a CMS field or ad headline) and name it — both are remembered on this device.
Example
The text Café ☕ 👍🏽 measured four ways:
Characters (graphemes): 8
Unicode code points: 9
UTF-16 code units: 11
UTF-8 bytes: 18How SMS length is calculated
An SMS carries 140 bytes. With the GSM-7 alphabet (basic Latin letters, digits, common punctuation and a few accented letters) that is 160 characters. Characters from the GSM extension table — ^ { } [ ] ~ \ | € — need an escape code and count as two.
A single character outside GSM-7, such as an emoji, a curly quote ’ or ç, switches the whole message to UCS-2, which allows only 70 characters. Longer messages are split into parts of 153 (GSM-7) or 67 (UCS-2) characters, because each part needs a header for reassembly — and carriers bill per part.
How X (Twitter) counts characters
- Every link counts as 23 characters, however long or short, because X wraps it in a t.co short link.
- Each emoji counts as 2, including combined emoji such as flags and skin-tone variants.
- Chinese, Japanese and Korean characters count as 2; Latin, Cyrillic, Greek and most other scripts count as 1.
- The limit for standard accounts is 280 weighted characters.
Frequently Asked Questions
What is the ideal length for a meta title and description?
Google truncates by pixel width, not characters: about 580 px for titles (roughly 50–60 characters) and about 920 px for descriptions on desktop (roughly 150–160 characters). Preview the real result in the SERP Snippet Preview or draft one with the Meta Description Generator.
Why does my emoji count as 2 in JavaScript?
JavaScript strings are UTF-16. Characters outside the Basic Multilingual Plane, including most emoji, are stored as a surrogate pair of two code units, so "😀".length is 2. Use [...str].length for code points or Intl.Segmenter for user-perceived characters.
Does a line break count as a character?
Yes. A line break is one character in the counts here and in most limits, including SMS. Windows-style CRLF line endings are two code units but one grapheme.
Why does my SMS cost more than one message?
Either it is longer than 160 GSM-7 characters, or it contains a character outside GSM-7 — often a smart quote or apostrophe pasted from a word processor — which cuts the limit to 70. Replace the characters listed under the SMS meter, or run the text through the Text Cleaner to convert smart quotes.
How do I count characters for a database column?
MySQL VARCHAR(n) with the utf8mb4 charset limits characters (code points), while byte limits apply to indexes and some APIs. Check both the code point and the UTF-8 byte figure.