ChatGPT Watermark Detector & Hidden Character Checker
Paste text to find zero-width spaces, invisible Unicode, look-alike letters and odd spacing, then copy a clean version.
Want to clean the text right away, with every hidden character highlighted? Clean text →
ChatGPT watermark checker for hidden characters
Check text for hidden characters that ChatGPT output, web pages or PDFs can carry: zero-width spaces, invisible Unicode format characters, look-alike letters from another alphabet and odd spacing. The report lists each type with counts, and the clean copy is one click away.
How to Use
- Paste the text (or a page URL) and pick the text language.
- Read the finding types and the detail lines under them.
- Copy the clean text after checking nothing you need was stripped.
Use Cases
- Scan AI-assisted drafts before publishing guest posts.
- Detect hidden characters in UGC and comments.
Limitations
- Analyzes plain text input, not binary DOC/PDF files.
- Heuristic detection: suspicious symbols are not always malicious.
Example Input / Output
A paragraph pasted from an AI chat with two U+200B and a Cyrillic "о" inside "document".
Found: zero_width_characters, homoglyph_substitution; hidden characters: 3; clean version ready to copy.
FAQ
ChatGPT watermark detector: what can actually be found in a text
People search for a ChatGPT watermark detector expecting a hidden signature that proves a text came from an AI. Here is what is real. OpenAI has said it built a text watermarking method and decided not to ship it, partly because rewording, translation or a second model wipes it out. Google does watermark Gemini output with SynthID Text, but that mark lives in the choice of words, and only Google's own tools can check it. Neither of these can be read by an independent checker, including this one.
What a checker can find is everything that sits in the text as characters: zero-width spaces, invisible format characters, look-alike letters from another alphabet and unusual spacing. These come from AI chat interfaces, from copying web pages and PDFs, and sometimes from people who tag copies on purpose. Paste the text, and the report lists each type it found, with a detail line under the badges, for example Found 2 zero-width/invisible characters.
Does ChatGPT add hidden characters?
Sometimes, but not as a declared watermark. In April 2025 users noticed narrow no-break spaces (U+202F) in answers from newer ChatGPT models and called them a watermark. OpenAI did not confirm that, and the character appears in ordinary typography too (French punctuation, numbers like 10 000). Zero-width spaces and soft hyphens in a pasted answer can also come from the app or page you copied it from, so the character alone does not tell you its origin.
Two practical conclusions:
- Finding an invisible character does not prove the text is AI-written. Not finding one does not prove the opposite.
- If you care about U+202F specifically, check it with the command below: this detector treats U+202F as a normal space and does not flag it.
For a judgement about authorship, use a style-based tool such as the AI text detector, and treat its score as a hint, not a verdict.
How to read the report
The badges are the finding types. Each one means a specific rule fired:
| Badge | What triggered it | Common innocent cause |
|---|---|---|
zero_width_characters | Any of U+200B–U+200F, U+2060–U+2064, U+FEFF, U+00AD and a few others | Copying from web pages, soft hyphens from Word, BOM at the start of a file, emoji sequences |
homoglyph_substitution | A Cyrillic letter next to Latin ones (in English mode), fullwidth or Greek look-alikes | Mixed-language keyboards, brand names typed with the wrong layout |
invisible_unicode | Other Unicode format characters (category Cf), e.g. bidi controls U+202A–U+202E | Text copied from Arabic or Hebrew interfaces, messengers |
spacing_steganography | More than 5 runs of two or more spaces | Manual alignment, PDF extraction |
trailing_space_steganography | More than 3 lines ending in spaces | Code editors, email clients |
statistical_bias | One two-letter word ending appears in over 15% of words | Lists and repetitive text; this is a rough heuristic, not an AI watermark test |
metadata_markers | Strings like c2pa:, xmp:, the phrases "AI-generated" or "Generative AI", UUIDs, long base64 blobs | An article that simply talks about generative AI, IDs in URLs |
The confidence percentage is not a probability that the text is AI-generated. It is a formula that grows with the number of finding types and characters found: one zero-width character gives about 46%, several types quickly reach 100%. Read the detail lines, not the number.
Zero width space detector: the characters, one by one
| Code | Name | Flagged? | Where it is legitimate |
|---|---|---|---|
| U+200B | Zero width space | Yes | Line-break hints in long URLs and Thai, Khmer text |
| U+200C | Zero width non-joiner | Yes | Persian, Hindi and other scripts: removing it changes spelling |
| U+200D | Zero width joiner | Yes | Emoji sequences like family or profession emoji: removing it splits them |
| U+200E / U+200F | Left-to-right / right-to-left mark | Yes | Mixed English and Arabic or Hebrew text |
| U+2060 | Word joiner | Yes | Rare; prevents a line break |
| U+FEFF | Byte order mark | Yes | Start of a UTF-8 file saved by some Windows editors |
| U+00AD | Soft hyphen | Yes | Optional hyphens from Word and hyphenated web pages |
| U+00A0 | No-break space | No, normalised in the clean copy | Normal typography: 10 km, Mr. Smith |
| U+202F | Narrow no-break space | No | French typography, thousands separators |
Check text for hidden characters without uploading it
If the text is confidential, check it locally.
Microsoft Word
Show/Hide ¶ (Ctrl+Shift+8) reveals spaces, no-break spaces and optional hyphens, but not zero-width spaces. To find those, open Find and type ^u8203 (the decimal code of U+200B); ^u8204, ^u8205 and ^u65279 find ZWNJ, ZWJ and BOM. Replace with nothing to remove them.
Google Docs
Docs has no mode that shows zero-width characters. Paste the text into this checker or into a code editor, clean it there and paste it back.
VS Code and other code editors
VS Code highlights invisible Unicode characters by default (setting editor.unicodeHighlight.invisibleCharacters), so hidden characters show up as boxes.
Command line
This prints every line that contains a zero-width character, BOM, soft hyphen or U+202F, and works on macOS and Linux:
perl -CSD -ne 'print "$.: $_" if /[\x{200B}-\x{200F}\x{2060}-\x{2064}\x{FEFF}\x{00AD}\x{202F}]/' text.txt
And this lists each suspicious character with its position and Unicode name:
python3 -c "import sys,unicodedata as u t=open(sys.argv[1],encoding='utf-8').read() [print(i,hex(ord(c)),u.name(c,'?')) for i,c in enumerate(t) if u.category(c)=='Cf' or c in ' ']" text.txt
Where hidden characters actually cause damage
- URLs and slugs. A zero-width space pasted into a link or a CMS slug produces an address that looks right and returns 404.
- Codes and logins. Promo codes, API keys and usernames copied from a chat fail validation with no visible reason.
- Source files. A BOM before
<?phpsends output before headers and triggers "headers already sent"; some JSON and CSV parsers choke on it or read it into the first column name. - Search and counts. A word with a hidden character or a Cyrillic letter inside is a different word for Ctrl+F, site search and spell checkers, and word counters disagree.
- Titles and snippets. A soft hyphen in a title or meta description can surface as a visible hyphen when the text is reflowed elsewhere.
Removing hidden characters safely
The clean copy does more than delete zero-width characters. Know what changes before you publish it:
- Zero-width and format characters are removed, including the joiners inside emoji sequences and the non-joiners that Persian or Hindi spelling needs.
- Look-alike letters are replaced with the expected alphabet. A mixed word such as a Latin brand name with a Cyrillic suffix will be changed too.
- Runs of spaces collapse to one, and trailing spaces are trimmed.
- Strings caught as
metadata_markersare deleted, including the phrases "AI-generated" and "Generative AI", UUIDs and long base64 strings. If your text discusses AI or contains IDs, restore them by hand. - Em and en dashes become hyphens, curly quotes become straight quotes and no-break spaces become ordinary spaces. This happens silently and is not counted as a finding.
If you only want to strip invisible characters and keep typography, use the Word replace method or the Perl command with s///g instead.
What a clean result does not prove
"No watermarks detected" means none of the rules above fired. It does not mean the text is human-written, and it says nothing about statistical watermarks such as SynthID Text. Retyping, translating or paraphrasing a text removes character-level marks completely, which is exactly why providers moved to statistical ones.
Images, video and audio carry provenance differently, in file metadata such as C2PA manifests. For those, use the image watermark detector, the video watermark detector and the audio watermark detector.
RankBotAI — AI SEO Optimization for WordPress
RankBotAI AI plugin automatically finds and fixes SEO issues in WordPress products and posts — no manual editing.
Why check text for hidden characters?
Invisible characters slip into text when you copy from AI chats, web pages, PDFs and messengers, and look-alike letters are sometimes planted on purpose to tag a copy. The detector shows exactly what it found and gives you a clean version. It does not tell whether a text was written by AI, and it cannot see statistical watermarks that only their owner can verify with a private key.