Invisible Character Detector
Paste any text to find zero-width spaces, hidden Unicode, direction overrides and look-alike letters, then strip them out in one click. Or copy an invisible character for a blank name. Free, runs in your browser, no sign-up.
Your text
What is hiding in there
Paste something above, or press Try an example.
Revealed text
Hidden characters will show up here as highlighted tags like [ZWSP].
Hover a tag to see the character name. Look-alike letters are underlined in amber. Emoji joiners and emoji variation selectors are left alone, since removing them breaks the emoji.
Copy an invisible character
Here for the invisible character copy paste? Press a button and the character is on your clipboard. Paste it into the box above if you want proof it is there.
Truly zero width. Good for breaking up links or words in chat; most name fields strip it or count the name as empty.
Takes up a letter's width and counts as a real character, so Discord nicknames and Fortnite names often accept it.
A wide blank classed as a letter. The usual pick for Instagram bios, TikTok and Roblox-style display names.
Platforms change their name filters without notice. If one is rejected, try another.
How this invisible character detector works
It reads code points, not what you see
Every character in a string is a numbered Unicode code point. The detector walks the text one code point at a time and checks each number against a list of about 60 characters that render as nothing or as blank space: zero-width spaces and joiners, the byte order mark, soft hyphens, Hangul fillers, the braille blank, no-break and odd-width spaces, direction controls, variation selectors, tag characters and stray control codes.
Normal spaces, tabs and line breaks are left alone. Everything else on the list gets a tag in the revealed view and a row in the table, with its U+ code point and official Unicode name so you can look it up.
Why .length lies about your text
Ask JavaScript for "hello".length and you get 5. Plant a zero-width space inside and you get 6, though the screen still shows five letters. That extra slot is why two identical-looking passwords fail to match, why a spreadsheet lookup misses, and why a character counter disagrees with your eyes.
It gets stranger. .length counts UTF-16 units, so an emoji or a tag character counts as 2. This tool counts real code points instead, and reports UTF-8 bytes separately, because that is what databases and SMS limits usually measure.
Grapheme clusters, emoji and false alarms
What you see as one character can be several code points glued together: a family emoji is four people joined by zero-width joiners, and a red heart is a plain heart plus variation selector 16. Those invisible parts are legitimate, so the detector skips a joiner that sits between two emoji and a variation selector right after one. Flag emoji for England, Scotland and Wales use tag characters and are skipped too.
Accents work the same way: “e” plus a combining acute is one letter. Real scripts rarely put more than two marks on a letter, so only runs of three or more are flagged as stacked marks, which is the Zalgo effect.
Look-alike letters (homoglyphs)
Cyrillic “а” and Latin “a” are different code points that look identical in most fonts. Swap one into a web address and you have a phishing link that passes a glance. The checker knows about 45 Cyrillic and Greek letters that pass for Latin ones.
It only flags them inside a word that also contains Latin letters, or in words made entirely of look-alikes when the text is mostly Latin. That keeps real Russian or Greek text from lighting up. It is a heuristic, not the full Unicode confusables table, so it can miss rarer swaps.
Why invisible characters show up in text
Copy and paste from documents
- Word and Google Docs. Soft hyphens, no-break spaces and zero-width joiners ride along when you copy from a document or a PDF.
- Web pages and CMSs. Byte order marks at the start of a pasted file, NBSPs from in HTML, zero-width spaces inserted to allow line breaks in long URLs.
- AI chat output. Narrow no-break spaces and other odd spaces have turned up in chatbot answers. See the AI section below.
- Source code. Direction overrides and look-alike letters planted to make code read one way and run another.
- Game and social names. Braille blanks and Hangul fillers typed on purpose to get a blank or spaced-out username.
AI-generated text and watermarks
In 2025 people noticed narrow no-break spaces and other unusual spaces in answers from some ChatGPT models and called them a watermark. OpenAI said they were a quirk, not a tracking mark. Either way, they are easy to spot here and easy to remove.
Real AI watermarks, such as Google's SynthID for text, are statistical patterns in word choice. Stripping characters does nothing to those. If you want AI text tidied up beyond hidden characters, the AI text cleaner handles em dashes, markdown leftovers and the rest.
Trojan Source attacks in code
In 2021 Cambridge researchers showed that bidirectional controls like RIGHT-TO-LEFT OVERRIDE (U+202E) can make source code display in a different order from how the compiler reads it (CVE-2021-42574). A comment can appear to close when it does not, or a check can appear to run when it is skipped. The same trick turns invoice[RLO]fdp.exeinto a file name that reads “invoiceexe.pdf”. The example text above includes one.
Hidden tracking and fingerprinting
Zero-width characters can encode bits. Give each recipient of a memo, a tweet draft or a leaked-looking post a unique pattern of them and any copy-pasted leak points back to its source. Tag characters go further and can hide a whole sentence, which is how instructions get smuggled into prompts for AI models. If you are about to repost text you did not write, run it through here first.
Blank names in Discord, Fortnite and Instagram
The friendlier use. Name fields usually trim spaces and zero-width characters, so people reach for characters that count as letters but draw nothing: the braille blank (U+2800) and the Hangul filler (U+3164). That is what the copy card above is for. The same characters are why a username can look empty in a chat log, and why this detector counts them as hidden.
Removing invisible characters by hand
Microsoft Word
Press Ctrl+Shift+8 (Cmd+8 on Mac) or click the ¶ button to show formatting marks. That reveals no-break spaces as a small degree sign and soft hyphens as a hooked dash, but not zero-width characters.
For those, open Find and Replace (Ctrl+H), type ^u8203 in Find what (the decimal code of U+200B) and leave Replace with empty. Repeat with 8204, 8205, 8288 and 65279. Use ^s for no-break spaces and ^- for soft hyphens.
Google Docs
Docs has no view that shows invisible characters. Open Edit → Find and replace, tick Match using regular expressions, search for [\u200B-\u200D\u2060\uFEFF] and replace with nothing. If the count says zero but something still feels off, paste the text into the detector above; it also catches look-alike letters, which no find box will.
VS Code and other editors
VS Code highlights invisible and ambiguous characters by default since version 1.63, through the editor.unicodeHighlight.invisibleCharacters and editor.unicodeHighlight.ambiguousCharacters settings. Turn on editor.renderControlCharacters to see control codes too.
To remove them across a project, open search with regex on (Alt+R) and run the same character class as above, replacing with nothing. GitHub also shows a warning banner on files that contain bidirectional controls.
Related tools
Cleaning up text that came out of a chatbot? The AI text cleaner strips hidden characters plus the stylistic tells. Tightening your own writing? The passive voice checker flags every sentence that hides who did what.
Some flagged characters are correct in context: ZWNJ in Persian and Hindi, NBSP between a number and its unit, LRM and RLM in mixed Arabic or Hebrew text. The detector shows you what is there. Whether it belongs is your call. Nothing you paste leaves your device.
Invisible character FAQs
What is an invisible character?
It is a Unicode character that takes up a slot in the text but draws nothing, or draws only blank space. The zero-width space (U+200B), zero-width joiner (U+200D), word joiner (U+2060) and byte order mark (U+FEFF) are the usual suspects. Others, like the Hangul filler (U+3164) and braille blank (U+2800), are technically letters that happen to have an empty glyph.
How do I copy and paste an invisible character?
Use the "Copy an invisible character" card above. Press a button, the character goes to your clipboard, and you paste it wherever you need it. You will not see anything after pasting; that is the point. To check it landed, paste it into the detector box and it will show up as a highlighted token.
Which invisible character works for Discord names?
Discord trims zero-width spaces and plain spaces from nicknames, so you need a character that counts as a real letter. The braille blank (U+2800) and Hangul filler (U+3164) are the two people use most. Discord changes its name rules from time to time, so if one gets rejected, try the other.
How do I get an invisible name in Fortnite or Epic Games?
Epic display names need at least three characters and filter a lot of Unicode, so a fully blank name is hit and miss. People usually mix a braille blank (U+2800) or Hangul filler (U+3164) with normal letters to get extra spacing. Copy one from the card above and test it in the display name field; Epic has blocked individual characters before.
What is a zero width character?
A character with no width at all. U+200B (zero-width space) marks a place where a line may break, U+200C and U+200D control whether neighbouring letters join (they matter in Persian, Hindi and emoji), U+2060 stops a break, and U+FEFF is a byte order mark that sometimes lands mid-text. They are all legitimate, and all invisible, which is why they get abused.
Is this invisible character detector free and private?
Yes. No sign-up, no length cap, no upload. The scan is plain JavaScript running in your browser tab, so text you paste never reaches a server. That matters when the text is a contract, a codebase or a leaked memo you are checking for a watermark.
Does ChatGPT add invisible characters to its text?
Some ChatGPT output has been caught with narrow no-break spaces (U+202F) and similar characters. OpenAI has said these are not a deliberate watermark. The detector will flag them either way. Bear in mind that statistical AI watermarks live in word choice, not in characters, so stripping characters does not make text undetectable as AI.
How do I remove invisible characters from text?
Paste the text above and press "Remove all hidden characters". The cleaned copy appears in a second box with a copy button. Tick the normalize option if you also want no-break spaces turned into normal spaces and look-alike Cyrillic or Greek letters swapped for plain Latin ones.
What is an invisible character viewer good for?
Debugging. A password that will not match, a spreadsheet lookup that fails on two identical-looking cells, JSON that refuses to parse, a username that says it is taken: all classic symptoms of a hidden character. The revealed view shows exactly where each one sits so you can see which copy is the odd one out.
Is there an invisible ASCII character or alt code?
Not really. ASCII only has control codes like NUL and the normal space, and most apps reject or strip the control codes. Alt+255 on a Windows number pad types a no-break space (U+00A0) in most fonts, which looks blank but is still a space, so many name fields trim it. For a blank that survives, you need Unicode characters like U+2800 or U+3164.