Verified properties
| Official Unicode name | ZERO WIDTH JOINER |
|---|---|
| Codepoint | U+200D (decimal 8205) |
| General category | Format (Cf) |
| White_Space property | No |
| Default ignorable | Yes |
| Counts as alphabetic | No |
| Survives whitespace trimming | Yes |
| Size in UTF-8 | 3 bytes |
| Group on this site | Truly invisible |
All properties above come straight from the Unicode database at build time. The joiner's default-ignorable status — the reason validators strip it — is verified on every publish.
Two jobs, one invisible character
The Zero-Width Joiner started in connected scripts like Arabic and Devanagari, where letters change shape depending on their neighbours. Placed between two characters, it requests the joined form even where joining would not normally happen. Then emoji gave it a second, far more famous career: sequences. The family emoji is not one codepoint — it is person, ZWJ, person, ZWJ, child. The rainbow flag is flag, ZWJ, rainbow. When a platform supports the sequence, you see one fused glyph; when it does not, the seams show and the parts display separately.
What that means in practice
Because the ZWJ hides inside so many emoji, it is one of the most common invisible characters you will ever copy without knowing it. A caption counted «too long» with visibly few characters often owes the difference to ZWJ sequences — every joiner is a real character costing 3 bytes. Paste any emoji-rich text into the test area below and the joiners appear as tags; that alone explains many mysterious length limits.
As a blank character, use with care
The table shows why the ZWJ is a poor choice for blank names: it is
default-ignorable, not alphabetic, and validators strip it freely. Its power
is contextual — between the right neighbours it changes rendering; alone it
is simply ignored. For a name that reads as empty, use the
Hangul Filler; for hiding a
break-point inside text, the
Zero-Width Space. Keep the
ZWJ for what only it can do — and for understanding why your emoji
sometimes fall apart in transit. In code, the escape is
"\u200D"; in HTML, ‍.
Try it
Paste a family emoji or any emoji sequence below and count the U+200D tags that appear between its parts — the invisible welds, made visible.
0 characters