"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 pointNameLook / widthCommon sourceRisk
U+200BZERO WIDTH SPACEZero widthPaste from Word, Slack, PDFMed
U+200CZERO WIDTH NON-JOINER (ZWNJ)Zero widthMultilingual typesetting (prevents joining)Med
U+200DZERO WIDTH JOINER (ZWJ)Zero width, joins emojiComposed emoji (family, professions)Med
U+FEFFBOM / ZERO WIDTH NO-BREAK SPACEZero widthStart of file, UTF-8 savesMed
U+00A0NO-BREAK SPACE (NBSP)One space wideWord, HTML  Med
U+3000IDEOGRAPHIC SPACE (full-width space)Full-width blankJapanese input (IME)Low
U+00ADSOFT HYPHEN (SHY)Usually invisibleWeb / word-processor line breaksLow
U+2060WORD JOINERZero widthSuppressing a line breakLow
U+200ELEFT-TO-RIGHT MARK (LRM)Zero width, controls directionBidirectional textMed
U+202ERIGHT-TO-LEFT OVERRIDE (RLO)Zero width, reverses display orderAttacks / pranksHigh

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

  1. 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.
  2. 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.
  3. 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.
  4. 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?
Mostly through copy-paste. Pasting from Word, Slack, PDF or certain web pages brings NBSP (U+00A0) and zero-width spaces (U+200B) along for the ride. In Japanese, a full-width space (U+3000) slipping in via the IME is another classic.
Is it safe to delete the BOM (U+FEFF)?
A UTF-8 BOM is not required, and in most environments you are better off without it — shell scripts, CSV and PHP in particular break on a leading BOM. On the other hand, one is sometimes added deliberately so Excel opens a CSV without mojibake, so confirm the use case before removing it.

The code points and character names in this article follow the Unicode standard (as of 2026-07-16).