TextWash

This page finds U+200D ZERO WIDTH JOINER. The sample below contains a family emoji: one glyph, seven code points, two ZWJs doing the gluing. Everything runs in your browser — nothing is uploaded.

Input

X-ray hover a highlight for details

Cleaned output copied ✓

Cleaning rules

What is U+200D (zero-width joiner)?

An invisible character that asks neighbouring characters to combine. It's how emoji sequences work: 👨 + ZWJ + 👩 + ZWJ + 👧 renders as a single family emoji. It also has a legitimate, required role in scripts like Arabic and Devanagari.

Where it comes from

Mostly emoji — copied from chat apps, tweets, commit messages. Also from complex-script text, and occasionally from "invisible ink" tricks that hide data in usernames or messages.

What it breaks

Length checks: JavaScript's .length for the family emoji above is 8, not 1 — surprise validation failures on "max 10 characters" fields. Naive truncation slices mid-sequence and leaves broken emoji halves. Some systems reject ZWJ in identifiers or usernames; others allow it, enabling spoofed lookalike handles.

Should you always remove it?

No — that's the honest caveat. Stripping ZWJ from emoji turns one family glyph into three separate people, and stripping it from Arabic or Indic text can change how words render. Remove it from code, identifiers and config; leave it in real emoji and complex-script prose. The x-ray above shows each one so you can decide; the "invisible characters" rule removes them if you want that.