tidyoutput.
← All tools

Invisible Character Remover

Paste any text to see every hidden Unicode character highlighted in place, with a count of what was found. Copy the cleaned version with one click.

Text to inspect

Emoji joiners, variation selectors, bidi marks and the Persian and Indic joiners are kept, because deleting them changes how correct text renders.

Everything runs in your browser. Your text is never uploaded or stored.

X-ray view0hidden characters
Hidden characters will be highlighted here.

What invisible characters are

Unicode includes dozens of characters that render as nothing: zero-width spaces, joiners, directional marks, byte order marks, and exotic space variants. They arrive in text through copy and paste from websites, PDFs, chat apps, and AI tools, and they survive every ordinary edit because you cannot see them to delete them.

The damage they cause

  • Code that looks correct but fails to compile or compare equal.
  • Usernames, passwords, and API keys that get rejected or silently mismatch.
  • Search and replace that cannot find text you can clearly see.
  • Spreadsheet lookups and joins that fail on visually identical keys.
  • Hidden payloads: tag characters and variation selectors can encode a whole ASCII string invisibly, which makes them a route for prompt injection.

How the X-ray view works

The tool scans every character against a list of invisible and format-control code points. Each hit is shown as a chip with its Unicode number, such as U+200B for a zero-width space, exactly where it sits in your text. Filled chips are removed; outlined chips were found but kept, because deleting them would change your text.

Why some are kept

Not every invisible character is noise. U+200D is what joins the three people in a family emoji, U+FE0F is what makes a heart render in colour instead of as a monochrome glyph, U+200C controls letter shapes in Persian and Hindi, and the bidirectional marks set reading order in Arabic and Hebrew. A blanket strip breaks all four, so they are reported and preserved. Tick the option in the left panel when you genuinely want everything gone, such as when sanitizing untrusted input.

The detection logic is published separately as the invisible-chars npm package, so this page and any code you write share one set of rules.

Where they come from

Most invisible characters in AI output are non-breaking spaces added by the browser when you copy from a chat interface, not something the model wrote. For the full breakdown, including which characters are a real security concern and which ones you should never strip, see invisible characters in AI text.

Frequently asked questions

Which characters does it detect?

Zero-width spaces and joiners, word joiners, byte order marks, soft hyphens, directional marks and overrides, variation selectors, Unicode tag characters, and the full family of non-standard space characters including the non-breaking space.

Are non-breaking spaces deleted?

No, they are converted to a regular space so your word spacing stays intact. Characters that are truly invisible, such as zero-width spaces, are removed entirely.

Which characters does it refuse to remove?

By default it keeps the ones that carry meaning: zero-width joiners, which hold emoji sequences like a family emoji together; variation selectors, which make a character render as a coloured emoji rather than monochrome text; the zero-width non-joiner, which controls letter shapes in Persian, Arabic, Hindi and Bengali; and bidirectional marks, which set reading order in mixed Arabic or Hebrew text. Deleting any of these corrupts correct text, so they are reported but preserved unless you opt in.

Can invisible characters really be used as watermarks?

They can be, in the sense that zero-width characters survive copy and paste, so a pattern of them can encode information without changing how text looks. But there is no public evidence that major AI models do this. Invisible characters found in ChatGPT or Claude output are almost always non-breaking spaces introduced by the browser when you copy from the chat interface.

Will it change my visible text?

Your letters, digits and punctuation are never touched. Emoji are also safe by default: a family emoji or a coloured heart is held together by hidden characters, so those are kept and shown outlined instead of filled. If you tick "also remove characters that carry meaning", emoji sequences will be split apart and right-to-left text will be reordered, which is why that option is off unless you ask for it.

Is anything uploaded?

No. Detection and removal run in your browser. The text never leaves your device.

More tools