b2KIT

Invisible Character Detector & Remover

Find and remove zero-width spaces, BOM markers, and other hidden Unicode characters.

How to Use Invisible Character Detector & Remover

  1. 1

    Paste your text

    Enter text that may contain hidden or invisible characters.

  2. 2

    Scan for characters

    The tool highlights all invisible or zero-width characters found.

  3. 3

    Remove or inspect

    Clean the text or inspect each invisible character individually.

Tested tool guide Text and writing tools Checked August 16, 2026

What Invisible Character Detector & Remover does, with a checked example

Paste any text and this tool lists every character that occupies a code point without showing a glyph: zero-width spaces, the byte-order mark, soft hyphens, bidi marks and similar. Each find is reported with its code point, official Unicode name and occurrence count, and one pass can strip them all out. The surprise for most users is that these are not formatting glitches or font artifacts: they are real characters that your editor stores faithfully, which is exactly why searches, validators and comparisons keep failing on text that looks identical to the eye.

Worked example

A concrete input and expected output from the current implementation.

Input

This is a\u200B test.

Expected output

Found 1 invisible character: U+200B ZERO WIDTH SPACE, 1 occurrence, immediately after the 'a'. Cleaned text (15 characters): This is a test.

The \u200B escape denotes a real U+200B zero-width space pasted between 'a' and the following space. It renders as nothing, so the input and the cleaned output look identical; the only observable difference is the character count, which drops from 16 to 15.

How the result is produced

1

Detection

The tool reads the pasted text one code point at a time and flags characters with no visible rendering: zero-width space (U+200B), zero-width joiner and non-joiner (U+200D, U+200C), the byte-order mark (U+FEFF), soft hyphen (U+00AD), bidi controls and similar format characters. Each hit is shown with its code point, Unicode name and how many times it occurs.

2

Removal

Removal is a rewrite: the tool returns the same text with the flagged characters deleted, ready to copy back into your editor. For ordinary prose this is always safe, because zero-width and format characters carry no meaning there. Confirm before stripping zero-width joiners, though: inside emoji sequences and in scripts such as Arabic or Devanagari, U+200C and U+200D are load-bearing, and deleting them can visibly change a word.

Good uses

  • Cleaning text copied from web pages, PDF viewers or chat apps before pasting it into a form, database field or API call that rejects non-printable characters; invisible characters are the most common cause of such rejections.
  • Debugging a lookup that fails for no visible reason: when a search, replace or string comparison misses even though two strings look identical, paste both in and compare the reports to find the hidden character that breaks equality.
  • Preparing text for strict tooling: word and character counters, length validators, hashing and checksums all count what is really there, not what you see, so strip hidden characters first to make the measured text match the visible text.

Limits and checks

  • A zero-width joiner is not always junk: in emoji sequences (family, skin tones) and in joining scripts, U+200D and U+200C carry meaning. The tool cannot know your context, so after a removal pass, re-check any emoji or non-Latin text you care about.
  • The report covers only the characters the tool scans for. A non-breaking space (U+00A0), narrow no-break space or ideographic space renders as visible whitespace, so it may go unflagged, yet it breaks comparisons, trimming and validation exactly like an invisible character.
  • Counts and positions describe the text as pasted. Once you remove characters, the remaining text shifts, so an earlier report's positions no longer line up with the new text; re-scan if you need fresh positions.

Common questions

The report says nothing was found, but my search still fails. Why?

A clean report only rules out the characters the tool checks for. The mismatch can come from a non-breaking space, which renders like a normal space but is a different code point, or from Unicode normalization: an accented e as one precomposed character versus e plus a combining accent are canonically equivalent yet compare unequal. Paste both strings and compare their character counts to find the difference.

Will removing these characters change how my text looks or what it means?

In ordinary prose, no. Zero-width spaces, soft hyphens and the BOM add nothing visible, and the cleaned text renders exactly as before; the only measurable change is that the character count drops. The exceptions are the joiners: inside emoji sequences and in scripts that rely on letter joining, removing U+200C or U+200D can visibly change the result, so review those cases after cleaning.

References and verification

The example and behavioral notes were checked against the browser implementation. Standards and primary references below define the relevant format, formula, or platform behavior.

Related Tools