FreeToolsLand

Invisible Character Detector

See every hidden character in your text, exactly where it sits.

Free, no signup, no limits

Where they are7 found

Invoice number: INV2026U+200B-04 Customer: AcmeU+200B Ltd Amount: 1250.00U+FEFF This line looks identical to the one below it. This line looks identical to the one belowU+200B it.

Positions
1:8Non-breaking spaceU+00A0
1:20Non-breaking hyphenU+2011
1:25Zero-width spaceU+200B
2:15Zero-width spaceU+200B
3:10Narrow non-breaking spaceU+202F
3:17Byte order markU+FEFF
6:43Zero-width spaceU+200B

How to find invisible characters in text

Paste the text and look at the preview. Every hidden character appears as a red tag carrying its code point, sitting in the position it actually occupies. Visible troublemakers like curly quotes and em dashes are highlighted in place instead, since those you can already see.

Underneath, every occurrence is listed with a line and column number. That is the part you need when the text lives in a file you have to go and edit.

Why seeing them beats removing them

Because you arrive here with a symptom, not a goal.

A CSV import that rejects one row. A search that returns nothing for a phrase you can read on the page. Two lines that look identical and refuse to match. A post that hits a character limit while apparently sitting well under it.

Stripping everything makes the symptom go away without telling you what caused it, and the next export from the same source brings it straight back. Seeing the character, named, at a line and column, tells you where it came from. That is the difference between fixing the text and fixing the thing that produced it.

Once you know, copying without them is one click.

What counts as an invisible character

Zero-width characters occupy no space at all: zero-width space (U+200B), zero-width joiner and non-joiner, the word joiner, and the byte order mark (U+FEFF) that leads many UTF-8 files.

Spaces that are not the space character. The non-breaking space (U+00A0) is the common one, and there are a dozen others of varying width. They look like a space and are not one, which is why a form rejects an address that reads perfectly.

Soft hyphens (U+00AD) mark where a word may break across lines. They render as nothing until the break happens, and they survive copy-paste.

Directional marks control the order of right-to-left text. Essential in Arabic and Hebrew, pure noise in an English document that picked them up from a web page.

Where they come from

Copying from a rendered page picks up whatever the CMS put there, including the zero-width spaces some sites use to control line wrapping. Word and Google Docs insert non-breaking spaces around punctuation as you type. PDFs carry soft hyphens from their line breaking. Language models emit non-breaking spaces and typographic punctuation as a matter of style.

None of these announce themselves, which is the entire problem.

Cleaning up once you have looked

"Copy without them" gives you the text with every flagged character removed. If it also needs its em dashes and curly quotes dealt with, the AI text cleaner does the whole set in one pass, and the em dash remover handles only the dashes.

Everything runs in your browser. Nothing is uploaded, which matters here more than most places: the text you bring to a tool like this is usually the text you are least able to paste into someone else's server.

Frequently asked questions

Something missing here?

If this tool almost does what you need, say what is missing. That is usually how the next version gets built.