What this does
Finds characters that do not show up on screen but are still in your text: the usual suspects behind code that “looks right” but fails, strings that look equal but are not, and text that was copied from a web page or chat app. Each one is listed with its line, column, code point, and name.
What it looks for
- Zero-width space, non-joiner, joiner, word joiner, and the byte order mark (U+FEFF).
- Bidirectional controls such as U+202E (right-to-left override), which can make source code display differently from how it executes. This is the “Trojan Source” technique.
- Non-breaking and other unusual spaces: U+00A0, U+2000 to U+200A, U+202F, U+205F, U+3000.
- Soft hyphens, invisible math operators, Hangul fillers, and deprecated format characters.
- Control characters other than tab and line breaks, and Unicode “tag” characters, which can carry text that is invisible to a reader.
- Variation selectors, and lone surrogates that make text invalid.
Cleaning up
“Remove hidden characters” deletes zero-width, bidi, and control characters and turns unusual spaces into normal ones. Zero-width joiners and variation selectors that are part of an emoji, such as 👨👩👧 and ❤️, are neither listed nor removed, because removing them would break the emoji; the same characters between ordinary letters are reported. Characters that do show up, like the replacement character U+FFFD, are listed but not removed.
Notes
Tabs and line breaks are not counted as invisible; use the Whitespace tab to see them. Only the first 1,000 findings are listed, with the total shown.
Privacy
This runs entirely in your browser. Nothing is uploaded.