Find zero-width spaces, odd spaces, bidi controls and lookalike letters, then clean them
Runs in your browser. Nothing you type is sent anywhere. Updated on 25 Oct 2026.A hidden character detector finds Unicode characters that show nothing or pass for others: zero-width spaces (U+200B), no-break spaces, bidi controls, control codes and lookalike letters. Text pasted from a chatbot, web page or PDF can carry them. Paste it to see each one with its code point and name, then remove them in one click.
Paste text into the Text box, or press Try an example.
Read the marked view: every hidden or lookalike character carries a label; hover it for its name.
Check the table for each character's position, code point, name and kind.
Tick which kinds to remove under Clean, then press Copy cleaned.
This detector finds characters you cannot see, or cannot tell apart, in pasted text. Each one is highlighted where it sits and listed with its position, its code point such as U+200B, its Unicode name and what it does. A one-click clean removes or replaces them, and you can choose which kinds to clean.
Five kinds are checked. Zero-width and invisible characters: zero-width spaces, joiners, word joiners, byte order marks, soft hyphens, and the tag and variation characters that can carry hidden text. Unusual spaces: no-break, thin, em and ideographic spaces and line separators, which look like ordinary spaces and break searches, CSV imports and exact comparisons. Bidirectional controls: overrides and isolates that reorder how text is shown; in source code they are the Trojan Source attack (CVE-2021-42574), where code reads one way in a review and runs another way. Control characters: codes such as NULL, ESCAPE and DELETE, plus the replacement character that marks text damaged by a wrong encoding. Lookalike letters: Cyrillic and Greek letters that match Latin ones, taken from Unicode's confusables data, and fullwidth or mathematical styled letters.
A Cyrillic or Greek letter is flagged only when it sits in a word that also has Latin letters, or when every letter of the word could pass for Latin, so ordinary Russian or Greek text is not reported. Some invisible characters are legitimate: the joiners inside emoji such as family groups, the emoji style selector, and the joiners that shape Devanagari, Bengali or Persian words. These are shown as benign and kept when cleaning.
What it does not do: check every one of Unicode's thousands of confusable pairs, judge whether a link is safe, or scan files. Everything runs in your browser. Related tools: Word Counter, Diff Checker, Regex Tester.
Copied text keeps every character of its source, and a chatbot answer, a web page or a PDF can carry characters that show nothing. The U+202F NARROW NO-BREAK SPACE, for one, looks like an ordinary space but breaks a search or an exact match. Paste the answer here to see each one with its code point; that space is listed under unusual spaces. A hidden character proves nothing about who wrote the text.
Every character is sorted into one of 5 kinds and counted, and the count shows beside each kind's Clean box. The built-in example finds 22: 2 zero-width and invisible, 4 unusual spaces, 4 bidirectional controls, 0 control characters and 12 lookalike letters, plus 3 benign joiners in an emoji and a Hindi word that cleaning keeps. The table lists each one with its position, code point and Unicode name.
Usually one of them contains a character you cannot see: a zero-width space, a no-break space instead of a normal one, or a Cyrillic letter that looks Latin. Paste both strings here and the difference is highlighted with its code point, so you can clean it or fix the source that produced it.
U+200B is a character that marks a possible line break but takes up no width, so it is invisible. It often arrives by copying from websites, chat apps or PDFs. Inside a password, a coupon code or a spreadsheet cell it makes an exact comparison fail even though the text looks right.
Published in 2021 as CVE-2021-42574, it hides bidirectional control characters such as RIGHT-TO-LEFT OVERRIDE (U+202E) in comments or strings. Editors then display the code in a different order from the one the compiler reads, so a reviewer approves code that behaves differently. These controls are marked in red here.
No. A zero-width joiner between two emoji, as in a family emoji, and the emoji style selector are marked benign and kept. So are joiners between letters of scripts such as Devanagari, Bengali and Persian, where they change how the letters combine. Only characters that serve no purpose there are removed.
The tool checks Cyrillic and Greek letters listed as confusable with Latin in Unicode's security data, such as U+0430, which looks exactly like a. They are flagged when the same word also has Latin letters, or when the whole word could pass for Latin. Fullwidth and styled mathematical letters are always flagged.
No. The text is scanned in your browser and never uploaded or stored. That matters here because people often check passwords, API keys and private messages for hidden characters. Closing the page discards the text; only your choice of which classes to clean is remembered.
Still stuck? Ask about Invisible Character Detector and anybody who knows can answer. No account needed.
Same job, other tools: Readability Checker – Flesch reading ease and grade level, with what to change · JSONPath Evaluator – Evaluate a JSONPath expression and get the matching values and their paths.