Strip Invisible Characters

Invisible characters sneak into text copied from web pages, documents and AI chats, and quietly break JSON, logins and search. Paste yours into the tool below and strip them — or find the tool for your exact case in the directory under it.

0 characters
Options

Aggressive mode can visibly change emoji, flags and right-to-left text. Off by default.

Every tool on this site

Clean it

zero-width space remover

Shows you where each invisible character sits before you delete it.

JSON cleaner

For a payload that will not parse.

Excel cell cleaner

For a spreadsheet column.

Word and Docs cleaner

For document text.

hidden characters

Hunting hidden characters in a file rather than a pasted string? This scans your text for where each one sits, and gives what cat -A actually prints for all nine — including the three the usual \p{C} cleanup pattern misses.

text comparison

Two strings that look the same but will not match a key? Prints the codepoint at every position where they differ, up to fifty of them, and can strip the invisible characters and compare again — nothing leaves the browser tab.

U+2028 and U+2029

Building JSON in JavaScript? What the line and paragraph separators do to it.

Understand invisible characters

invisible Unicode characters

The full list of hidden characters — and what an invisible character actually does to a form field: measured, browsers reject all 128 zero-width ones in an email field.

invisible text

Two unrelated things get called invisible text: format characters that measure 0.00 px and cannot be searched for at all, and the Hangul fillers most blank-text pages hand out, which are letters measuring 16.00 px each.

empty character

There is no such code point — measured across twenty candidates, only ten come off under both trim and strip.

Unicode tag characters

Text that looks clean but is not empty? Tag characters hide a whole ASCII message with nothing on screen.

invisible letter

Unicode names twelve characters FILLER and exactly four of them are letters — U+3164, U+1160, U+115F and U+FFA0. All four paint zero pixels while reserving a full character cell, all four pass a letters-only check, and no trim will remove them.

zero-width joiner

The one invisible character that is there on purpose: it glues emoji into a single picture, and one stray copy of it flips a hundred-character text message from GSM-7 to UCS-2 and from one segment to two.

hidden text

Is hidden text on a page really hidden? Measured across fourteen ways of hiding it, nine still hand the text over to select-all and copy, and only four keep it out of find-in-page — including what a redaction box in a PDF actually does, which is add 28 bytes rather than remove anything.

Names, blanks & tokens

blank text message

Measured: an empty chat bubble is 16 px tall, one ordinary space leaves it at 16 px, and only 16 of 23 invisible characters get past the send button’s emptiness check.

invisible username

Measured: NFKC collapses 23 blank names into 18, a trim erases 7 of them, and the pattern most username fields use refuses all 23.

invisible nickname

Drawn rather than matched: measured in Chromium, the character in a 40 px avatar circle is 0.00 px for a zero-width space and 16.00 px for a Hangul filler — wider than the 11.00 px capital A of a real name.

domain name

A character you cannot see in a domain name? Measured: IDNA deletes U+200B, U+00AD, U+FEFF and U+2060 outright, so ap+U+200B+ple.com and apple.com resolve as the same domain.

What hidden characters cost you in tokens

Feeding the text to a model? The token cost of what you cannot see.

Images

text from an image

Text baked into a picture? Removing it is reconstruction, not deletion: over a 228 × 46 box on a background that varies by 5, one sampled colour leaves 5 stray pixels, blurring it in place leaves 130 and interpolating leaves 2.

watermark remover

Writes over a box 2.98× the mark — 5,432 of the pixels it rewrites were never the mark, and drawing the box a pixel tighter writes 942 clean pixels wrong on a background where a wider box costs nothing.

What this removes

Invisible Unicode characters that survive copy and paste:

Optional passes handle em dashes, exotic spaces and curly punctuation. The report below the output box lists every codepoint it removed and how many.

What this keeps by default

Some invisible characters carry meaning. Removing them would damage your text, so they stay unless you turn on aggressive mode:

What this cannot remove

A Claude watermark has two separate layers, and this tool handles only the first one.

The first layer is invisible characters. Those are listed above, they can be found and deleted deterministically, and this tool shows you exactly what it took out.

The second layer is a statistical pattern carried by word choice itself. It is not a character you can delete — it is the sequence of words Claude picked. Removing it means rewriting the wording, which is a different job. This page does not rewrite your sentences, so it does not touch that layer. We show no removal score and no “percent human” number, because a browser-side tool has no way to verify one, and a number nobody can check is just decoration.

Supported input

Not supported: PDF, Word .docx, Pages and image files. Stripping metadata out of those needs a parsing library or a server, and this page is a single static file that runs in your browser. Rather than pretend otherwise, the file picker does not accept them.

Nothing you paste is uploaded. The cleaning runs in this browser tab.

How it works

Your text is read one codepoint at a time. Each character is checked against the removal sets above, and against the keep list, which runs first — a character that matters for emoji or for a complex script is never removed in default mode. Everything deleted is counted by codepoint, and the counts are printed in the report so you can check the work instead of trusting it.

FAQ

What is an invisible character?

A Unicode character that holds a position in your string and draws nothing on screen. Most are format characters, general category Cf. The one you almost certainly have is U+200B ZERO WIDTH SPACE: three bytes, one character, invisible, and it survives copy and paste.

How do I remove invisible characters?

Paste the text into the box and press Remove invisible characters. The characters come out, the report lists every codepoint it removed and how many of each, and you copy the cleaned text in one click. Nothing is uploaded — the work happens in this tab.

Does this remove a Claude watermark?

It removes the invisible-character layer of one. Text that comes out of Claude can carry zero-width and tag characters, and those are found and deleted deterministically. The other layer is a statistical pattern in the word choice itself, which is not a character and cannot be deleted here — that needs a rewrite, which is a different job.

Will this make my text undetectable by AI detectors?

No, and any page promising that is guessing. This removes invisible characters. It does not rewrite your wording, so the statistical pattern in the word choice stays. There is no removal score and no “percent human” number here, because a browser-side tool has no way to verify one.

Which characters does it keep?

The ones that carry meaning. U+200D holds emoji families together as one picture, U+200C is required for correct Persian, Arabic and Devanagari, and U+FE0F keeps an emoji rendering as an emoji. Those stay unless you turn on aggressive mode, which takes them out too.

Do you store what I paste?

No. There is no backend and no analytics. The cleaning happens in this tab and the text never leaves your device.

Is it free, and does it work on a phone?

Free, no sign-up, no account, no usage counter and no email wall — it is a single static page with no server behind it, so there is nothing to meter. On a phone the page is one column, the text boxes resize to the viewport, and the report table scrolls sideways instead of pushing the layout apart.