Remove Invisible Characters & AI Watermarks from Text

Paste AI-generated text and instantly strip zero-width characters, hidden Unicode watermarks, em dashes, smart quotes and other tell-tale artifacts. Everything runs locally in your browser.

🔒 Runs 100% in your browser — your text never leaves this page.

What TextPurify detects and removes

AI writing tools and rich-text editors quietly insert dozens of special Unicode characters into text. Some are harmless typography; others are invisible characters that can be used to fingerprint or watermark AI-generated content. TextPurify scans every single character against a table of known offenders:

🫥 Invisible & zero-width characters

Zero-width spaces (U+200B), joiners, word joiners, soft hyphens, directional marks, byte-order marks and Unicode tag characters — all invisible to the eye, all detectable by software.

👻 Non-standard spaces

The narrow no-break space (U+202F) that ChatGPT is known to insert, non-breaking spaces, thin spaces, hair spaces and eleven other lookalikes — normalized to a plain space.

➖ Em dashes & exotic dashes

The em dash (—) is the single most cited "AI tell". Convert it to a comma, hyphen or space — your choice. En dashes, minus signs and horizontal bars are normalized too.

❝ Smart quotes & punctuation

Curly “smart” quotes become straight quotes, the ellipsis character (…) becomes three honest dots, guillemets and primes are straightened.

🧾 Markdown leftovers

Optionally strip **bold**, *italic*, # headings, `inline code` and [link](url) markers that AI chats leave behind when you paste into plain-text fields.

🛡️ Emoji & language safe

Smart guards keep emoji sequences (👨‍👩‍👧), emoji variation selectors (❤️) and joining characters in Persian, Arabic and Indic scripts intact. Cleaning never breaks legitimate text.

Invisible character reference

These are the most common hidden characters found in AI-generated and copy-pasted text, and what TextPurify does with each:

Code pointNameWhy it shows upAction
U+200BZero-width spaceInvisible word breaks; classic text watermarkRemoved
U+200CZero-width non-joinerWatermarking; legitimate in Persian/Indic text (kept there)Removed*
U+200DZero-width joinerWatermarking; legitimate in emoji sequences (kept there)Removed*
U+2060Word joinerInvisible no-break glueRemoved
U+FEFFZero-width no-break space (BOM)File-encoding artifact pasted into textRemoved
U+00ADSoft hyphenInvisible hyphenation hintRemoved
U+200E / U+200FDirectional marks (LRM/RLM)Copy-paste from bidirectional textRemoved
U+E0000–U+E007FUnicode tag charactersCan encode entire hidden messages inside textRemoved
U+FE00–U+FE0FVariation selectorsInvisible glyph modifiers (kept for emoji)Removed*
U+202FNarrow no-break spaceFrequently seen in ChatGPT output→ space
U+00A0Non-breaking spaceRich-text editors and HTML→ space
U+2000–U+200AEn/em/thin/hair spacesTypography-grade spaces→ space
U+2014Em dashThe most famous AI writing tell→ comma / hyphen / space (your choice)
U+2013En dashRanges and typography→ hyphen
U+2018 / U+2019 / U+201C / U+201DCurly quotesSmart-quote auto-correction→ straight quotes
U+2026Horizontal ellipsisSingle-character "…"→ three dots

* Kept automatically when part of an emoji sequence or between letters of joining scripts (Persian, Arabic, Hindi, etc.).

Frequently asked questions

Why does AI-generated text contain invisible characters?

Several reasons: the model's training data contains them, the chat interface inserts typographic characters (narrow no-break spaces, curly quotes) for nicer rendering, and some tools deliberately embed zero-width characters or Unicode tags as a fingerprint. Whatever the cause, they survive copy-paste and can be detected by plagiarism checkers, spam filters and AI detectors.

Does ChatGPT watermark its text?

OpenAI has not announced a production Unicode watermark, but users have repeatedly observed special characters such as the narrow no-break space (U+202F) in ChatGPT output, and third-party tools do use zero-width characters to tag text. Cleaning them is harmless for normal text, so removing them before publishing is a sensible default.

Will cleaning break my emoji or non-English text?

No. TextPurify has explicit guards: zero-width joiners inside emoji sequences (👨‍👩‍👧), emoji variation selectors (❤️) and joining characters between Persian, Arabic or Indic letters are automatically preserved.

Is my text uploaded to a server?

Never. The entire cleaner is a small JavaScript module that runs inside your browser tab. Your text does not leave your device, which also means it works offline once the page is loaded.

How do I remove em dashes from ChatGPT text?

Paste your text above and choose what the em dash (—) should become: a comma (reads most naturally), a plain hyphen, or a space. There is also a dedicated Em Dash Remover page.

Can it also strip Markdown formatting?

Yes — enable the "Markdown leftovers" toggle to strip **bold**, *italic*, # headings, `inline code`, ~~strikethrough~~ and [link](url) markers. It is off by default because some people paste intentional Markdown.