"I pasted it and search won't find it." "The diff shows no change, yet the strings won't compare equal." "The source code fails with a mysterious error." Behind these puzzles there is often an invisible character — one that renders as nothing, or as a plain space. With no width, or looking like an ordinary blank, they are nearly impossible to spot by eye. This guide catalogs the common ones with their code points, then explains the real damage they cause and how to clean them up.
Characters that exist but can't be seen
Unicode includes many characters that show nothing on screen (or look like an ordinary space) yet still occupy one character of data. Alongside control characters such as newline and tab, there are special characters for marking word boundaries or controlling writing direction. Each has a legitimate purpose, but when they slip in during a copy-paste or an encoding conversion, they cause bugs that are hard to diagnose.
Invisible character catalog
Here are the invisible and confusable characters you are most likely to meet in practice. The names and code points follow the Unicode standard.
| Code point | Name | Look / width | Common source | Risk |
|---|---|---|---|---|
| U+200B | ZERO WIDTH SPACE | Zero width | Paste from Word, Slack, PDF | Med |
| U+200C | ZERO WIDTH NON-JOINER (ZWNJ) | Zero width | Multilingual typesetting (prevents joining) | Med |
| U+200D | ZERO WIDTH JOINER (ZWJ) | Zero width, joins emoji | Composed emoji (family, professions) | Med |
| U+FEFF | BOM / ZERO WIDTH NO-BREAK SPACE | Zero width | Start of file, UTF-8 saves | Med |
| U+00A0 | NO-BREAK SPACE (NBSP) | One space wide | Word, HTML | Med |
| U+3000 | IDEOGRAPHIC SPACE (full-width space) | Full-width blank | Japanese input (IME) | Low |
| U+00AD | SOFT HYPHEN (SHY) | Usually invisible | Web / word-processor line breaks | Low |
| U+2060 | WORD JOINER | Zero width | Suppressing a line break | Low |
| U+200E | LEFT-TO-RIGHT MARK (LRM) | Zero width, controls direction | Bidirectional text | Med |
| U+202E | RIGHT-TO-LEFT OVERRIDE (RLO) | Zero width, reverses display order | Attacks / pranks | High |
The damage: identical-looking, yet no match
Search and diff mismatches. Put a single U+200B between the t and e of "test" and searching for "test" no longer finds it. A text comparison reports "differences" even though the two look identical, and you lose time hunting for a cause you can't see.
Broken code. An invisible character in source code is a direct cause of compile errors and SyntaxErrors. A BOM (U+FEFF) at the very start of a file is a classic offender: it emits stray whitespace before your output, or breaks the shebang (#!) on line 1 of a shell script.
Spoofing. U+202E (RLO) reverses the display order of everything after it. Abused, it disguises a file's extension: a name that is really "report" followed by RLO and then "cod.exe" renders on screen as "reportexe.doc", making an executable look like a document. Combine that with look-alike characters (homoglyphs) and you can spoof URLs and domains too. To check a suspicious domain, convert an internationalized domain name to its xn-- form with the Punycode / IDN Converter and compare what you see with what the address actually is.
A detect-and-remove workflow
- Suspect it first. The length is off, there is a mystery blank at the end, or search stops working — those signs point to an invisible character.
- Make it visible. Since the eye can't help, paste the text into a tool that lists characters by type. The Invisible Character Remover detects zero-width characters, the BOM, unusual spaces and control characters by category, shows them highlighted, and strips them in one click — all in your browser, with nothing uploaded.
- Keep the ones you need. ZWJ (U+200D) joins emoji, so removing it blindly splits composed emoji such as "👨👩👧" apart. Some invisible characters are load-bearing; decide before you delete.
- If mojibake is involved. Sometimes the real culprit is a mistaken encoding rather than an invisible character. In that case, use the Character Encoding Converter to detect and repair the original encoding.
Note the full-width space (U+3000): in Unicode it is an ideographic space used in East Asian typesetting, and it slips into Japanese text especially often — IMEs insert it for indentation or in the pre-conversion state. Since ASCII code and IDs usually want a plain half-width space, a stray U+3000 is especially worth watching for.
FAQ
How do invisible characters get in?
Is it safe to delete the BOM (U+FEFF)?
The code points and character names in this article follow the Unicode standard (as of 2026-07-16).