Guide
Finding invisible characters and decoding hidden text watermarks
Some of the most important characters in a document are the ones you cannot see. Unicode includes many that take no space on screen: zero-width spaces that allow a line break, joiners that bind letters together, direction controls for right-to-left scripts, and a block of tag characters that mirrors ASCII. Each has an honest purpose, and each can also be abused to hide text, mark a copy for tracking, or make a file name or command look different from what it is. This page shows what is hiding in a piece of text.
What gets detected
The table groups what it finds by kind and shows the count, the code point and the legitimate use. Zero-width space U+200B marks a break opportunity in scripts without spaces. Zero-width non-joiner U+200C stops letters from joining in Persian and Hindi. The joiner U+200D glues emoji sequences such as a family, and joins letters in Indic scripts. Others are the soft hyphen, variation selectors that choose emoji or text style, unusual spaces such as the non-breaking space, bidirectional controls, and fillers that render as blank.
A worked example
The sample is a short business paragraph with traps built in. The page reports 63 hidden characters of 6 kinds in 185 characters of text: 31 zero-width spaces, 26 non-joiners, 3 joiners, 1 soft hyphen, 1 variation selector and 1 unusual space. A message appears above the table, “Hidden message decoded from Binary in zero-width characters (zero-width space = 0, non-joiner = 1): ID-7731”. Seven characters at eight bits each is 56 bits, and the long zero-width run right after the words “Quarterly report” carries them. The three joiners and the variation selector belong to the family emoji at the end, which is why they are listed as legitimate.
How a text watermark works
Two invisible characters make a binary alphabet. A tool picks one for 0 and the other for 1, converts an ID into bits, and inserts the run into a sentence. Every recipient gets a copy with a different run, and a leaked copy can be traced by decoding it. Because the characters survive copy and paste, the mark often outlives screenshots of the source but not retyping.
Cleaning the text
Each row of the table has a Remove checkbox. The default ticks the invisible kinds that are rarely wanted in plain text, and a switch labelled “Keep joiners, variation selectors and tags inside emoji sequences” is on, so the family emoji in the sample stays one glyph. After you choose, the cleaned text appears below with a copy button. The inline view, which writes every hidden character as a bracketed code point such as U+200B, is the quickest way to find a stray one inside a word.
Limits
The detector knows the kinds listed on the page. Rare format characters may slip through, and visible look-alike letters from other alphabets are a different problem handled by the homograph detector. A decoded message tells you what was written, not who wrote it. Removing joiners from Persian, Hindi or emoji text changes how it is displayed.
Related tools
- Invisible Character Tool offers a copyable invisible character when you need one.
- Text Cleaner removes other kinds of formatting clutter.
- IDN Homograph Detector checks visible look-alike letters in domain names.
- Image Steganography hides messages in pictures instead of text.
Checked against the current version of the Zero-Width Character Detector on .

