How Many Characters Is an Emoji?

Type 😀 into a form with a 100-character limit and you will probably be fine. Type 👨‍👩‍👧‍👦 into the same form and you may discover you have just spent seven characters on one picture. Both look like a single glyph. Neither is counted the same way by every system that will handle it.

This is not a bug, and it is not something any single counter can normalise away. It follows directly from how emoji are encoded, and once you can see the structure the inconsistencies stop being mysterious. If you are hunting for the right symbol in the first place, a browsable Emoji reference is the fastest way to find it; what follows is what happens to it once you have pasted it somewhere.

An Emoji Is a Sequence, Not a Letter

Emoji are not a separate font or an image format. They are characters in Unicode, the same standard that encodes the Latin alphabet, Chinese characters and mathematical symbols. Each one has a code point — 😀 is U+1F600 — and the rules governing them are published by the Unicode Consortium in UTS #51, the technical standard for emoji.

The complication is that many emoji are not one code point. They are several, glued together with an invisible joining character, and the result is drawn as a single picture only if the font and platform know how. The zero-width joiner (U+200D) is the glue. A family emoji is literally a man, a woman, a girl and a boy with joiners between them.

Where that sequence is unsupported, it degrades gracefully into its parts — which is why an unfamiliar emoji sometimes appears on an older phone as several separate figures rather than one, or as the tofu box □.

The Same Emoji, Counted Three Ways

Three different counts matter, and they disagree with each other by design:

  • Code points — how many Unicode characters the sequence contains. This is what Python's len() reports.
  • UTF-16 code units — what JavaScript's .length reports, and what a great many web forms and databases actually measure. Emoji outside the Basic Multilingual Plane take two units each.
  • UTF-8 bytes — what storage limits and SMS gateways care about.
EmojiWhat it isCode pointsUTF-16Bytes
😀Grinning face124
❤️Red heart (with variation selector)226
👍🏽Thumbs up + skin tone modifier248
🇯🇵Flag of Japan (two regional indicators)248
👩🏾‍💻Woman technologist, medium-dark skin4715
🏳️‍🌈Rainbow flag4614
👨‍👩‍👧‍👦Family: man, woman, girl, boy71125

The family emoji is the extreme case and the most useful one to remember: one visible glyph, seven code points, eleven UTF-16 units, twenty-five bytes. Against a 160-character SMS or a database column declared as VARCHAR(20), that single picture is not cheap.

Why ❤️ has a hidden second character

The red heart is worth singling out. U+2764 on its own is a plain black-and-white dingbat inherited from older character sets. The colour version requires a second, invisible code point — U+FE0F, the variation selector — telling the renderer to draw it as emoji rather than text. Two code points, one visible glyph, and a trailing character most people never know they pasted.

This is why a heart sometimes arrives at the other end monochrome. The variation selector was stripped somewhere along the way, usually by a system that trimmed the string to a character limit and cut it in the wrong place.

Where the Difference Actually Bites

SMS. A plain GSM-encoded message allows 160 characters. The moment a single emoji appears, the whole message switches to UCS-2 encoding and the limit drops to 70. One 😀 in an otherwise plain 150-character message turns it into a three-part message you may be billed for three times.

X (Twitter). Most emoji count as 2 against the 280-character limit, because X measures in code points with weighting rules of its own. ZWJ sequences cost considerably more. Our Twitter/X character counter applies those rules rather than counting raw characters.

Databases. MySQL's utf8 is famously not UTF-8 — it caps at three bytes per character and cannot store any emoji at all, because every pictographic emoji needs four. The column has to be utf8mb4. Inserting an emoji into a utf8 column either errors or silently truncates the row at that point, which is a memorable way to lose the second half of a user's message.

Truncation generally. Cutting a string to length without respecting grapheme boundaries splits sequences. Truncating 👨‍👩‍👧‍👦 at five code points leaves a man, a woman and a dangling joiner — which renders as two people and an invisible character, not a family.

Skin Tones, Flags and Other Sequences

Three mechanisms account for most multi-code-point emoji, and they behave differently:

Skin tone modifiers. Five tones based on the Fitzpatrick scale attach to any human emoji, adding one code point each. 👍 becomes 👍🏽 with no visual clutter but double the character cost.

Flags. There are no flag characters. 🇯🇵 is the regional indicator letters 🇯 and 🇵 placed side by side; the renderer recognises valid two-letter country codes and draws a flag. Type the indicators for a code that is not a country and you get two letters in boxes. This is also why flag support varies so much between platforms — it is a rendering decision, not an encoding one.

ZWJ sequences. Professions, families and couples are built by joining existing emoji. 👩 + ZWJ + 💻 gives 👩‍💻, a woman technologist. Add a skin tone and you have four code points for one small picture. The Unicode Consortium publishes the full emoji list with every supported sequence and how each vendor renders it, plus a running count of how many emoji exist in the current release — a number that grows with each version.

Do Emoji Count as Words?

Almost universally, no. Word counters split on whitespace, and an emoji surrounded by spaces will usually be counted as a token by some tools and skipped by others. There is no standard here, which is a good reason not to rely on a word count for anything containing emoji. If a limit matters, count characters instead — the definition is at least well specified, even when the answer varies by platform.

For background on how emoji arrived in the first place — Shigetaka Kurita's original 1999 set for NTT DoCoMo, and their absorption into Unicode in 2010 — Wikipedia's emoji article is a solid and well-sourced overview.

Checking Your Own Text

The practical advice is short: never assume the count you see is the count the destination will apply. Paste your text into a counter before you commit to it, and check against the platform that actually enforces the limit.

Our character counter reports one character per visible glyph, which matches what a reader perceives and what most CMS fields measure. The word counter handles the same text if you also need sentence and paragraph totals, and the character count FAQ covers the surrounding edge cases — spaces, accented letters, and combining marks — which behave much like emoji and trip people up for the same reason.

Emoji are a genuine writing system now, with grammar-like conventions and real ambiguity. They are also, underneath, ordinary text with unusually complicated encoding. Treating them as text — countable, truncatable, and occasionally surprising — is the way to avoid the failures.