Zero-width joiner, U+200D
An invisible character that asks two neighbouring characters to be rendered as one. It is what turns a sequence of separate emoji into a single glyph, and what connects letters in several scripts.
How it works
The joiner is e2 80 8d in UTF-8, and it is an instruction to the text shaping engine rather than a character to draw. When a font's shaping tables contain a ligature for the sequence around it, the joiner asks for that ligature to be used. Emoji are the clearest case: a family glyph is not one code point but a sequence, person, joiner, person, joiner, child, and the renderer substitutes a single picture for the whole run. Remove the joiners and shaping has nothing to combine, so three separate figures appear. The same mechanism drives Indic and Arabic scripts, where a joiner forces a connected form that changes what the word looks like to a reader of that script. Between two Latin letters, though, no shaping table has an entry for the sequence, so the joiner asks for a ligature that does not exist and the renderer draws nothing. That is why the correct rule is conditional rather than absolute, and why it has to inspect both neighbours: the same three bytes are load-bearing in one context and pure noise in another. The neighbour check also has to see through variation selectors and skin-tone modifiers, since those sit between the base character and the joiner without breaking the sequence.
What it is legitimately for
Load-bearing, constantly. The family emoji is one code point for a man, a joiner, a woman, a joiner, a girl. Remove the joiners and you get three separate people. In Devanagari, Bengali and Arabic it controls whether letters connect.
What it breaks
- Removed carelessly, a single family emoji becomes three unrelated ones.
- Removed carelessly from Devanagari or Arabic text, words render wrongly to a reader of that script.
- Left in place between two Latin letters, it does nothing visible and breaks search and comparison exactly as a zero-width space would.
How to find it yourself
Look for e2 80 8d in a hex dump. Judging whether a given one matters means looking at what sits either side of it.
What Clipboard Sanitizer does
Removed only where it carries no meaning. The app looks at both neighbours, seeing through skin-tone modifiers and variation selectors, and keeps the joiner if either neighbour is emoji or belongs to a joining script. This is the case a find-and-replace script gets wrong.
Questions
Will this break my emoji?
No. That is the specific reason the rule is conditional rather than absolute.
Will it break Hindi, Bengali or Arabic text?
No. Those scripts are checked by code point range, and a joiner next to any of them is kept.