← All tools
Free tool · Local inspection

Invisible Character Detector

Find hidden characters in your text and see exactly where they occur. This scanner checks eight specific Unicode characters, not every invisible character. It cannot identify AI writing or statistical watermarks.

0 / 20,000 UTF-16 units

Detection runs only when you ask, in this tab. No text is sent or saved. The limit counts UTF-16 units: most characters use one; an astral emoji uses two. Long pastes are never cut.

Enter text or load the sample to begin.

Eight character types checked

  • U+200BZero-width spaceRenders nothing, but splits the word for search and counting.
  • U+200CZero-width non-joinerBreaks a cursive join or ligature. Needed in some scripts.
  • U+200DZero-width joinerJoins glyphs, and holds emoji sequences together.
  • U+2060Word joinerPrevents a line break and leaves no visible trace.
  • U+FEFFByte-order markA file signature. Unicode discourages every other use.
  • U+00ADSoft hyphenRenders only at a line break, so it hides in plain sight.
  • U+00A0Non-breaking spaceLooks like a space, so a typed space will never match it.
  • U+2028Line separatorForces a line break. Legal, but rare in text a person typed.

Finding one is not a problem by itself. Non-breaking spaces support typography; joiners can be essential to writing systems and emoji. Nothing is removed or rewritten here.

What the detector shows you

Three short texts, run through this page’s own detection code. The first pane shows the text as it appears, the second shows each tracked character as ▯, and the third is what the scanner reports. The detector removes nothing: your text stays exactly as you pasted it.

A zero-width space between two words
As it looks
Please send the​ final draft by Friday.
With markers
Please send the▯ final draft by Friday.
What the scanner reports

1 occurrence found across 1 type. Your text is unchanged.

CharacterUnicodePosition
Zero-width spaceU+200B16

Text copied from a web page or a chat window can carry one. Nothing looks wrong, but an exact search for “the final” does not match this sentence, because the hidden character sits between the two words.

Non-breaking spaces in 10 km and Mr Smith
As it looks
The trail is 10 km long. Ask Mr Smith for the map.
With markers
The trail is 10▯km long. Ask Mr▯Smith for the map.
What the scanner reports

2 occurrences found across 1 type. Your text is unchanged.

CharacterUnicodePosition
Non-breaking spaceU+00A016
Non-breaking spaceU+00A032

Here both are deliberate typography: they keep the number with its unit, and the title with the name, on the same line. The scanner reports them like any other finding, and deciding whether they belong is up to you.

A zero-width joiner inside an emoji
As it looks
Welcome to the team 👩‍💻
With markers
Welcome to the team 👩▯💻
What the scanner reports

1 occurrence found across 1 type. Your text is unchanged.

CharacterUnicodePosition
Zero-width joinerU+200D22

The joiner is what turns 👩 and 💻 into the single 👩‍💻 emoji. The scanner reports every U+200D, but this one is doing its job: remove it and the emoji falls apart into two. Leave it in place.

From finding to clean text

  1. 1. Detect here

    Paste your text into the scanner above and select Detect characters. Note what it found and where; the scanner itself changes nothing.

  2. 2. Clean with Unicode Cleaner

    Paste the same text into Unicode Cleaner. By default it removes zero-width spaces, byte-order marks and soft hyphens, replaces non-breaking spaces with ordinary spaces and line separators with newlines, and keeps zero-width non-joiners, zero-width joiners and word joiners unless you check them. Uncheck any rule whose character you want to keep.

  3. 3. Compare the two versions

    Paste the original and the cleaned version into Text Diff Checker to review what changed before you use the result. Its counts include removals you cannot see, such as a zero-width space.

If the text lives in Word or Google Docs, you can also search for these characters in the document itself: How to find and remove zero-width spaces covers Word, Google Docs and VS Code.

What it does not check

The scanner looks for exactly eight characters. “None of the eight tracked characters found” means only that.

Other invisible characters
The narrow no-break space (U+202F), the paragraph separator (U+2029), direction marks and bidirectional controls (U+200E, U+200F, U+061C, U+202A to U+202E, U+2066 to U+2069), variation selectors, tag characters (U+E0000 to U+E007F), the Mongolian vowel separator (U+180E) and Hangul fillers are not reported.
Look-alike characters
A letter from another alphabet that looks like a Latin one, such as a Cyrillic а in place of an a, is not flagged. Neither are wide spaces such as the em space (U+2003).
Positions count code points
Position 1 is the first code point. An emoji such as 😀 counts as one, a combining accent counts on its own, and 👩‍💻 counts as three. The column number in your editor can differ.
Up to 20,000 units at a time
Text longer than 20,000 UTF-16 units is refused, never truncated, and nothing is scanned. An emoji such as 😀 uses two units. Check a long document in parts.
Not a test for AI writing
Finding one of these characters says nothing about who or what wrote the text. They can come from ordinary typing, word processors, copied web pages and publishing tools, and statistical watermarks are patterns in word choice, not characters.

Where these characters come from, and why none of them is a watermark: Invisible characters in AI text, and where they actually come from.

Frequently asked questions

Which invisible characters does the detector recognize?

It checks eight types: zero-width space, zero-width non-joiner, zero-width joiner, word joiner, byte-order mark, soft hyphen, non-breaking space and line separator. It reports their Unicode codes, counts and positions. It is not a complete scan of every invisible or unusual Unicode character.

Does finding an invisible character mean the text was AI-generated?

No. These characters can come from ordinary writing, rich-text copying or publishing software. Joiners can shape letters or combine emoji, and non-breaking spaces can keep words together. Finding one does not identify an author, an AI model or a statistical watermark.

How do I remove the hidden characters it finds?

The detector itself removes nothing; it only reports and highlights. Paste your text into Unicode Cleaner: by default it removes zero-width spaces, byte-order marks and soft hyphens, replaces non-breaking spaces with ordinary spaces and line separators with newlines, and keeps zero-width joiners, non-joiners and word joiners unless you check them. Keep the joiners where they hold an emoji together or shape words in a script such as Persian. Opening the cleaner does not transfer your text.

Related reading

In the AI watermark database

Want to polish a draft?

Open the editor to review writing suggestions. Your scanner text is not transferred.

Open GenPolish