Zero-width and invisible
WORD JOINER (U+2060)
The opposite of a zero width space: an invisible character that forbids a line break at its position, without adding any width.
- Codepoint
U+2060- Category
- Zero-width and invisible
- Removed by default
- Yes
- Governing option
- No option needed
- Can be load-bearing
- No
Where it comes from
Typesetting tools insert it to keep a number and its unit together. It is also the standard replacement for U+FEFF in the middle of a document, so anything that "modernises" a BOM leaves word joiners behind. Steganography tools that expect a filter to catch U+200B often use this one instead.
Why it matters
It is invisible, it is not whitespace, and most zero-width filters only look for U+200B and the joiners — which is exactly why hidden-payload tools reach for it. Two positions, two symbols, and you have a binary channel that survives most cleaners.
Before and after
The word joiner sits between the number and the unit and welds them together.
The character is shown as a labelled chip so you can see where it sits. In your text it draws nothing at all.
When it is legitimate
Keeping "12 kg" or "Fig. 4" from splitting across lines. In prose the same job is better done with a no-break space, which is at least visible as a space.
How to remove it
The default pass removes it. Ghostchars never keeps a word joiner: unlike ZWJ it has no orthographic role in any script.
Is it an AI watermark?
Used to hide data — not a watermark
No. It is a typesetting control that hidden-payload tools have adopted precisely because naive "zero width space removers" ignore it. Nothing about it points at a machine author.
A known carrier for deliberately hidden payloads. Someone put it there on purpose, which is a different question from who wrote the words.
Questions
How is it different from a zero width space?
U+200B permits a line break at its position; U+2060 forbids one. Both are invisible and both are removed by the default pass.
Should I use a no-break space instead?
For prose, usually yes. U+00A0 is visible as a space, so a reader and a diff can both see it, and it does the same "keep these together" job.
Check your own text
Paste anything into the cleaner to see every hidden character it contains, with position, codepoint and what happens to each one. Nothing is uploaded.