Skip to main content

Reference

Invisible Unicode Characters: The Complete List

CleanPastedText editorial · Updated

Text workbench

Try it on your text

Cleaning mode

Removes hidden characters and standardizes AI-style punctuation.

Try a real example

Each sample contains a problem you cannot see.

Original

Pasted text

0 chars · 0 words

Cleaned

Ready to copy

0 changes

Text stays in this browser

Same words · No AI rewriting · No content logging

Every invisible and look-alike character, in one table

Invisible Unicode characters are code points with no visible glyph that still affect text processing — they change how text breaks, joins, flows, and compares, while showing nothing on screen. The last two rows are a different problem worth knowing about: look-alikes, which do have a glyph but are not the character you think they are. This reference covers the ranges that matter in practice, from the everyday zero-width space (U+200B) to the security-relevant tag characters (U+E0000–U+E007F). Every entry is written as a code point, never as the raw character, so this page cannot contaminate your clipboard — and the last column says exactly what our cleaner does with each one, including the ones it deliberately leaves alone.

Code pointNameCategoryWhy it mattersWhat our cleaner does
U+200BZero Width Space (ZWSP)Zero-widthInvisibly glues words together; breaks search, spellcheck, and exact string matching.Removed
U+200CZero Width Non-Joiner (ZWNJ)Zero-widthRequired inside Persian and many Indic words; pure baggage in English text.Removed
U+200DZero Width Joiner (ZWJ)Zero-widthBuilds multi-person emoji; also a known hidden-data channel in plain text.Removed (kept inside emoji)
U+2060Word JoinerZero-widthZero-width no-break glue; a frequent stowaway in copied text.Removed
U+FEFFByte Order Mark (BOM / ZWNBSP)Zero-widthFile-encoding marker; becomes a ghost character that breaks JSON, CSV, and scripts.Removed
U+00ADSoft HyphenFormatInvisible hyphenation hint from PDFs and justified layouts; pollutes extracted text.Removed
U+00A0No-Break Space (NBSP)SpaceLooks like a space but is not one to parsers; the HTML   entity.Converted to U+0020
U+202FNarrow No-Break Space (NNBSP)SpaceReported in o3/o4-mini output in April 2025; standard in French number formatting.Converted to U+0020
U+2009Thin SpaceSpaceTypesetting space that defeats exact-match search and deduplication.Converted to U+0020
U+200AHair SpaceSpaceThe thinnest space; visually indistinguishable from a normal space.Converted to U+0020
U+2000–U+2008En Quad through Punctuation SpaceSpaceNine fixed-width typesetting spaces; all read as ordinary spaces on screen.Converted to U+0020
U+205FMedium Mathematical SpaceSpaceSpacing around math operators; strays into copied formulas and equations.Converted to U+0020
U+3000Ideographic SpaceSpaceFull-width CJK space; misaligns mixed English-CJK text.Converted to U+0020
U+180EMongolian Vowel SeparatorFormatReclassified from space to invisible format character; a notorious edge case.Removed
U+200E / U+200FLeft-to-Right / Right-to-Left MarkBiDiFlip text direction; cause cursor jumps and misplaced punctuation.Removed
U+061CArabic Letter MarkBiDiDirection control for Arabic-script digits; invisible everywhere else.Removed
U+202A–U+202EBiDi Embeddings and OverridesBiDiCan visually reorder code and URLs; the 'Trojan Source' attack vector.Removed
U+2066–U+2069BiDi IsolatesBiDiModern directional isolates; same reordering risks, still invisible.Removed
U+2028 / U+2029Line / Paragraph SeparatorFormatInvisible line breaks that crash JavaScript and break JSON parsers.Converted to a newline
U+0085Next Line (NEL)FormatA C1 control that some systems treat as a line break and others ignore entirely.Converted to a newline
U+E0000–U+E007FTag CharactersSecurityAn invisible copy of ASCII; the 'ASCII smuggling' prompt-injection channel.Removed (kept in flag emoji)
U+FE00–U+FE0FVariation SelectorsFormatSelect glyph variants (text vs emoji style); each can also hide data.AI Clean and Plain ASCII only
U+E0100–U+E01EFVariation Selectors SupplementSecurity240 more invisible selectors; enough to encode arbitrary hidden bytes.AI Clean and Plain ASCII only
U+034FCombining Grapheme JoinerFormatInvisible combining character that defeats naive text filters.Removed
U+FFFCObject Replacement CharacterFormatPlaceholder left behind where an embedded image or object used to sit.Removed
U+FFF9–U+FFFBInterlinear Annotation Anchor / Separator / TerminatorFormatRuby-annotation controls that survive copy-paste out of typeset East Asian text.Removed
U+115F / U+1160Hangul Choseong / Jungseong FillerFormatZero-width Hangul placeholders long used to fake blank usernames and messages.Removed
U+3164 / U+FFA0Hangul Filler / Halfwidth Hangul FillerFormatRender as blank space in most fonts; a classic invisible-username trick.Removed
U+17B4 / U+17B5Khmer Vowel Inherent Aq / AaFormatInvisible inherent vowels that Unicode advises against using in plain text.Removed
U+2010HyphenLook-alikeRenders like the ASCII hyphen-minus but fails exact matching.Not detected or changed (Plain ASCII deletes it)
U+2011Non-Breaking HyphenLook-alikeA hyphen that forbids a line break; identical on screen to U+2010.NFKC folds it to U+2010, still not ASCII (Plain ASCII deletes it)
U+0430Cyrillic Small Letter A (homoglyph)Look-alikePixel-identical to Latin 'a'; the classic character substitution flagged by Turnitin.Not detected or changed (Plain ASCII deletes it)

To strip the rows marked "Removed" or "Converted" from your own text, use the cleaner at the top of this page or the dedicated invisible character remover. To check text without changing it, see the AI watermark checker. The single most common family in the table, U+200B and its zero-width neighbours, gets a closer look on the zero-width space remover.

Which invisible characters appear in AI-generated text?

The best-documented case is the narrow no-break space (U+202F): in April 2025, days after OpenAI launched o3 and o4-mini, the academia startup Rumi reported those models embedding U+202F where normal spaces belong in longer outputs. OpenAI said the characters were not a watermark but "a quirk of large-scale reinforcement learning," and they vanished from output within days — the full story is on our ChatGPT watermark page.

Beyond that episode, most invisible characters in AI text arrive through the tooling around the model rather than the model itself: HTML rendering converts spacing to U+00A0, Word and Google Docs add smart typography and non-breaking spaces, and PDFs contribute soft hyphens (U+00AD). Zero-width spaces (U+200B) and word joiners (U+2060) also ride along when AI answers are copied from chat interfaces. Our guide to ChatGPT's hidden characters shows how to detect each one.

Which invisible characters are security risks?

Three groups: tag characters, variation selectors, and BiDi overrides. Tag characters (U+E0000–U+E007F) are a complete invisible copy of ASCII, which makes them a channel for "ASCII smuggling" — hiding instructions inside text that humans cannot see but language models happily read. Riley Goodside demonstrated the technique in January 2024, and security researcher Johann Rehberger chained it into a Microsoft 365 Copilot exploit that exfiltrated email content and MFA codes through invisible characters (disclosed January 2024, since fixed). In October 2025, FireTail retested major models: ChatGPT, Copilot, and Claude sanitized tag characters, while Gemini, Grok, and DeepSeek remained vulnerable — and Google declined to fix, classifying it as social engineering.

Variation selectors (U+FE00–U+FE0F plus the U+E0100–U+E01EF supplement) offer 256 invisible values — one hidden byte after any visible character. Paul Butler's February 2025 post "Smuggling arbitrary data through an emoji" showed the encoding trick, and Mindgard/Lancaster University researchers (arXiv:2504.11168, April 2025) used "emoji smuggling" to achieve up to 100% evasion of production LLM guardrails, including Azure Prompt Shield and Meta Prompt Guard. BiDi embeddings and overrides (U+202A–U+202E) round out the list: they can visually reorder source code and URLs, the "Trojan Source" class of attacks. That family, together with the U+200E and U+200F directional marks, is covered in full on how to remove BiDi control characters. A related but visible-not-hidden trick is the homoglyph attack, which swaps a letter for a lookalike from another script instead of hiding anything.

Which invisible characters are legitimate?

Many of them — in the right context. ZWNJ (U+200C) is required to spell Persian and many Indic-script words correctly. ZWJ (U+200D) is the glue inside multi-person and profession emoji. U+202F is correct French typography for number grouping and before certain punctuation. BiDi marks and isolates make mixed Arabic-English or Hebrew-English text render in the right order. None of these characters is malicious by nature; they become noise only when they travel into text that never needed them.

That is why blind stripping is the wrong approach, and why CleanPastedText cleans emoji-safely: zero width joiners and variation selectors that sit inside a real emoji sequence are preserved automatically and labeled "kept" in the report, while the same characters loose in ordinary prose are stripped. For Persian or Indic text that depends on U+200C, Advanced Controls has a dedicated "Joiners (ZWNJ/ZWJ)" switch, separate from the general invisible-characters toggle, so you can keep it off without disabling every other cleaning rule. Either way, the report names every character it found by code point — nothing happens silently. The how-it-works page documents exactly what each pass touches.

Common questions

Frequently asked questions

What are invisible Unicode characters?

Invisible Unicode characters are code points that render no visible glyph but still exist in the text and affect how software processes it. They include zero-width characters (U+200B, U+200C, U+200D), format controls (U+00AD, U+FEFF), special spaces that look like a normal space (U+00A0, U+202F, U+2009), bidirectional controls (U+202A–U+202E), tag characters (U+E0000–U+E007F), and variation selectors (U+FE00–U+FE0F).

How do I see invisible characters in my text?

Paste the text into a character-level checker like CleanPastedText, which names every hidden character it finds — Unicode name, code point, count, and whether it was removed, replaced, or kept. Developers can also spot them in VS Code (which highlights invisible Unicode by default since the Trojan Source disclosures), in a hex viewer, or with a regex over the zero-width and format-character ranges.

Which invisible character did ChatGPT use?

The narrow no-break space, U+202F. In April 2025, users found ChatGPT's o3 and o4-mini models placing U+202F where normal spaces belong in longer outputs. OpenAI said it was not a watermark but a quirk of large-scale reinforcement learning, and the characters disappeared from output within days. No hidden-character watermark is known to be in use by ChatGPT as of August 2026.

Are invisible Unicode characters dangerous?

Some are. Tag characters (U+E0000–U+E007F) encode invisible instructions for prompt-injection attacks against AI assistants ('ASCII smuggling'), variation selectors can smuggle arbitrary hidden bytes past security filters, BiDi overrides enable Trojan Source attacks that visually reorder source code, and Cyrillic homoglyphs like U+0430 substitute for Latin letters to evade matching. Most others are harmless typesetting characters that simply break formatting.

How do I remove all invisible Unicode characters at once?

Paste the text into CleanPastedText: it converts special spaces to regular spaces; strips zero-width characters (U+200B, U+200C, U+200D, U+2060, U+FEFF), bidirectional controls, tag characters, and variation selectors outside emoji; and reports every character it found by name and code point — entirely in your browser. Doing it manually requires regex ranges over the format-character blocks, which is easy to get wrong.

Why does Unicode include invisible characters at all?

Because real-world text needs them. ZWNJ (U+200C) is required to spell Persian and many Indic words correctly, ZWJ (U+200D) builds emoji sequences, U+202F is correct French number spacing, and BiDi controls make mixed Arabic-English text readable. They only become a problem when they travel, via copy-paste or AI output, into contexts that never needed them.

Continue reading

Related guides & tools