Proje Defteri

Remove Invisible Characters

Find the invisible Unicode characters, unusual spaces, bidirectional controls, typographic tells and non-Latin letters hiding inside Latin words. Every finding is shown with its codepoint, exactly where it sits. Decode what was hidden, then clean it in one click. Your text never leaves your browser.

This tool does not prove AI authorship

No detector can prove that a text was written by AI, and this one does not claim to. Every finding below is a Unicode character that is physically present in the text; the same characters can come from a word processor, a web page, a PDF copy or an ordinary keyboard.

Do not use this tool to accuse anyone. There is no "probability this was written by AI" score here, and that is deliberate. A measurement describes the text; an inference describes the author. This tool only does the first.

Your text stays in your browser. Nothing is uploaded or stored, and once the page has loaded the tool keeps working offline.

What Are Invisible Characters?

Unicode contains a family of characters that have no drawn shape, show nothing on screen, and yet really occupy a position in the text. The best known is U+200B, the zero width space. It has zero width, you cannot select it visually, but it counts toward the character total, breaks a search, blocks a login when it lands in a password field, and produces a baffling compiler error when it lands in a line of code.

The rest of the family behaves similarly. U+FEFF is normal as a byte order mark at the start of a file but has no business in the middle of a paragraph. U+00AD, the soft hyphen, only appears at a line break. U+2060, the word joiner, prevents one. The U+E0000 tag block is the most telling of all: those characters have no function in ordinary writing at all, and exist in practice only to hide a message inside plain text.

How do they get into the text?

When you copy an answer out of a chat with a language model and paste it into a document, you do not only copy the letters you can see. The interface renders the text as HTML, and wrapping hints, component separators and occasionally deliberate markers all travel to the clipboard with it. The same thing happens when you copy from a web page, a PDF or a Word document. So finding an invisible character tells you the text passed through an interface. It does not tell you who wrote it.

Which Markers Mean Something and Which Are Innocent

The most common mistake is treating every finding as equally incriminating. The table below shows how much information each of the main markers actually carries.

CharacterWhere it is normalWhen it means something
U+00A0 no-break spaceWord, Google Docs, HTML pages, number formats like "10 000"Almost never. It only matters when it lands inside code or data.
U+202F narrow no-break spaceFrench punctuation, clock and number formats, typesetting softwareAlmost never. It was spotted in ChatGPT output in April 2025 and taken for a watermark; it was then explained as an artifact of large scale reinforcement learning rather than a watermark, and the behaviour disappeared within about a day.
U+2014 em dash (—)Every piece of software that substitutes typography, including Word, macOS, Pandoc, Hugo and this very siteNever on its own. It identifies the software the text passed through, not the author.
U+2019 curly apostrophe (’)Every editor and publishing pipeline with typographic substitutionAlmost never. It does matter inside a code block.
U+00AD soft hyphenWeb pages, typesetting softwareWorth a look when it repeats dozens of times in one paragraph.
U+200B zero width spaceCopies taken out of web interfacesMeaningful in the middle of a word, especially at regular intervals. A scattered single one is a wrapping hint.
U+034F grapheme joinerAlmost nowhereEverywhere it appears. It has no visual effect and does not arrive by accident.
U+202E right-to-left overrideNowhereEverywhere it appears. It means the text is not what it looks like, and it is the core primitive of the Trojan Source class of tricks.
U+E0000 tag blockNowhereEverywhere it appears. This block exists to hide data inside plain text, and because it mirrors ASCII it can be read off directly.
Cyrillic "а" inside a Latin wordNowhereEverywhere it appears. It shows the text was deliberately processed, to dodge a spell checker, a filter or a search match.

In short: the innocent characters make up the noise, and the meaningful ones are rare. A hundred no-break spaces tell you nothing. One tag character tells you a great deal.

How Hidden Messages Are Embedded and Decoded

Saying that invisible characters exist is cheap. The useful part is saying what they say. This tool tries four schemes and reports which one matched.

This feature is only worth having if it does not cry wolf, so a payload has to clear several gates before anything is reported. The characters must form a contiguous run, because a scattered single U+200B at a word boundary is a content management system's line break hint rather than data. The alphabet must be narrow: a real binary payload uses exactly two distinct codepoints, and six different zero width characters mixed together is paste debris. The length must divide by 8 or 16. And the decoded result must be plausible printable text; high entropy garbage is rejected rather than displayed. If none of the schemes fits, the answer is explicit: these characters do not decode to readable text under any scheme this tool knows. The tool never guesses, and it never partially guesses.

What a Character Proves and What It Does Not

A measurement describes the text. An inference describes the author. This tool only does the first, and that is a choice rather than a technical limitation. A U+200B is either there or it is not; anyone can reproduce that on their own machine and prove us wrong if we are. A percentage can be neither reproduced nor refuted, only believed or disbelieved. That is why there is no percentage here.

Start with this site itself

This blog's configuration file has Goldmark's typographer enabled. The practical consequence: of the 72 Turkish post sources, 71 contain straight quotes, yet every published page shows curly ones. No human performed that conversion, a compiler did. Press the "Sample from a publishing pipeline" button above and every finding you see was produced by software. Treating typographic tells as a fingerprint reads the publishing toolchain, not the writer.

Invisible characters are a provenance artefact, not a watermark

Two claims sound alike and are constantly confused. The first is that these characters show up in language model output: that is true, and this tool measures it. The second is that language models use these characters to watermark text: there is no support for that. Originality.ai explicitly rejected the watermark reading on a published page, and their reasoning holds up. A watermark has to be hard to remove in order to be worth anything, and these characters vanish with one click, for instance with this page. The April 2025 U+202F episode points the same way: the behaviour disappeared within about a day and was explained as a by-product of large scale reinforcement learning rather than a watermark. Whatever else a watermark is, it does not vanish in a day.

Removing them does not change what a detector says

There is a direct measurement of this. Originality.ai tested it with their own detector: adding invisible characters to a text or stripping them out did not change the result. Honesty requires noting that this is a vendor testing its own product and that it has not been independently replicated. The result is not surprising though, because statistical detectors look at the distribution of word choices rather than at whitespace. The practical meaning here is plain: this tool is no use for beating a detector, and we did not build it for that.

What is left from the era of statistical detection

The history of this field is worth knowing, independently of anyone's current accuracy claims. Vanderbilt University disabled Turnitin's AI detector in August 2023 and published its reasoning. The arithmetic was this: at the vendor's then-stated one percent false positive rate, against roughly 75,000 submissions a year, about 750 papers a year could be wrongly flagged. Turnitin later revised its own false positive rate upward to about four percent at the sentence level. A widely cited 2023 study measured that detectors of that era flagged non-native English writers disproportionately, attributing it to those detectors penalising constrained linguistic expression. Other universities followed Vanderbilt in switching the detector off.

We draw no conclusion about today from that, and we suggest you do not either. The study measured detectors of the 2023 era. Vendors have since published markedly better figures, including claims of reduced false positives for non-native writers. We are not in a position to say whether those claims are true or false: as far as we could establish, they have not been independently replicated. We are stating our own uncertainty plainly, because that is exactly what makes this section worth reading.

One more note. GPTZero, the best known detector built on perplexity and burstiness, said publicly in autumn 2023 that it had moved off that approach in favour of a trained model. In other words, the popular signals of that era, including the sentence length measure on this very page, were not considered good enough by the people selling them.

So what are these characters good for?

Not for identifying an author, but for knowing what your text actually is. A curly quote that lands in a code block stops the build. A zero width space makes a search fail to match, makes two records compare unequal, and makes a password field silently reject you. In Excel it turns a number cell into text. In a database it corrupts a primary key. These are real, reproducible, fixable problems, and this tool was built for them.

What to Do If a Detector Accused You Unfairly

First, plainly: this tool produces no evidence either for you or against you. Finding nothing in your text does not clear you, and finding something does not incriminate you. What actually speaks to authorship is not the text but the process.

How to Clean a Document Without Breaking It

This section is for people who are not chasing AI at all, only trying to fix a document that broke. Invisible characters cause trouble in Word, Excel, Google Docs, Notepad++ and Figma content on a regular basis, and the source is usually mundane: a paste from a web page with formatting, a PDF copy, a bad export or a translation tool.

  1. Strip only the invisible characters first. Zero width characters, the tag block and the directional controls are almost always unwanted, and removing them does not change how the text looks at all, which makes this the lowest risk step.
  2. Be careful with spaces. A no-break space is sometimes deliberate: "10 000 km", "Prof. Jane Smith", or a table column that must not wrap. Leave this option off for text going to print and turn it on for text going into code or data.
  3. In Excel the problem is usually a number cell. A U+00A0 or U+200B inside a cell turns the number into text and your total silently goes wrong. After cleaning the characters out, remember to convert the column back to a number, or the cell stays text.
  4. Treat quotes and dashes separately. Curly quotes and em dashes are correct typography in anything that will be published, and flattening them lowers quality. In a .json, .csv or source file they cause real errors, so flatten them there without hesitation.
  5. Always replace confusables. A Cyrillic letter inside a Latin word is never something you want. It silently breaks search, sorting and matching.
  6. Apply normalisation last, and pick the right one. NFC is lossless and safe almost always. NFKC is lossy: it folds fullwidth letters, ligatures and mathematical bold letters down to their plain equivalents. That is wonderful for search and data matching and destructive for deliberately formatted text.

Notes for developers: VS Code's editor.unicodeHighlight settings mark these characters in the editor and keep an allowed-characters and allowed-locales list so you are not drowned in warnings for writing your own language. In Python, unicodedata.normalize applies the same normalisation forms and str.isprintable() gives a quick check. In Notepad++, Show All Characters in the View menu displays the same characters in place. For text going into a Git repository the best place to catch this is before the commit; once it is in, it is in the history.

After every run, read the per-category receipt and the before and after comparison. If the difference is much larger than you expected, one of the options needs turning off. And every clean can be undone: the undo button does not disappear on a timer, it stays for as long as the page is open.

Method and Limits

What is detected: zero width and invisible characters, the Unicode tag block, variation selectors, bidirectional controls and whether they balance, unusual spaces, C0 and C1 control characters, line and paragraph separators, the replacement character, fullwidth forms, ligatures, mathematical alphanumeric symbols, combining mark stacking, sequences that are not in NFC, and non-Latin characters placed inside otherwise Latin words. Hidden payloads are decoded under four schemes.

What is not detected: authorship. Style. Whether a text was copied. And most importantly, a statistical watermark. A watermark of the kind Anthropic describes adds no character to the text at all; it biases the distribution of the model's word choices. This tool cannot see it and no character level tool can. We write that down as an honest statement of the limit rather than as a shortcoming.

A note on the marking method: this tool does not put a stand-in glyph where an invisible character sits. That is precisely the reasoning of UTS #55 section 4.2: even if these characters are made visible, their normal effect on the text should be retained, as this can otherwise lead to misleading rendering. If you make a zero width character visible by substituting a space for it, what you are showing is no longer the user's text: it wraps differently and measures differently. So here the marker is drawn as a frame around the character instead. Source: UTS #55, Unicode Source Code Handling. Confusable handling follows UTS #39 and directional behaviour follows UAX #9.

Watermarking Is a Separate Layer

Everything this tool reports lives at the character level: something that is physically sitting in the text. Text watermarking has an entirely different layer to it. According to Anthropic's own support page, models launched on or after 2 August 2026 support machine-readable marking at launch, while marking for existing models is still in progress. So it would be wrong to say that all Claude output after that date is watermarked; the right question is when the model you used was released.

The same page says two more things worth knowing. Generated files carry signed provenance metadata following the C2PA standard, which is a separate layer from the statistical mark inside the text. Anthropic also says it is working to let users and third parties detect these marks, which means there is not yet an open verification tool anyone can pick up today.

The text mark is statistical: it adds no extra character at all, it biases the model's word choices according to a secret key. The detector on this page cannot see it, and no character based tool can. If you want the detail on how such a watermark is placed, what it proves and whether it can be stripped, that is covered in our write-up on Claude's text watermark. The article covers the statistical layer; this tool covers the character layer.

Frequently Asked Questions

Does this prove that a text was written by AI?

No. No detector can prove that, and this one does not either. Every finding here is a Unicode character that is physically present in the text. The same characters can come from a word processor, a web page, a PDF copy or an ordinary keyboard. The findings tell you which software the text passed through, not who wrote it. That is why there is no percentage, no probability and no verdict on this page.

Is my text uploaded anywhere, and how can I check?

All analysis, decoding and cleaning happens inside your browser with JavaScript. Nothing is sent to a server and nothing is stored. You can verify that without trusting us: press F12, open the Network tab, paste your text and inspect the request bodies. Your text appears in none of them. To be straight with you, the list will not be empty, because the page itself loads advertising and analytics scripts. The claim is not that the page makes no requests. The claim is that your pasted text is not inside any of them. Once the page has loaded you can disconnect from the internet and keep using the tool offline.

Does removing invisible characters hide text from AI detectors?

No. Originality.ai measured this directly in a published test: adding invisible characters to a text or stripping them out did not change what their own detectors reported. That is a vendor testing its own product and it has not been independently replicated, but the result is the expected one, because statistical detectors look at the distribution of word choices rather than at whitespace characters. So this tool is useless for hiding an assignment. What it is good for is different: stripping the characters that break code blocks, ruin search matches and corrupt database fields.

What is a zero width space and how does it get into my text?

U+200B zero width space is a character with no width that is nevertheless really there. You cannot see it, but the cursor takes an extra step over it. Web pages use it to allow long words to wrap, some interfaces use it to separate text components, and some hidden data schemes place it deliberately. It survives copy and paste and stays in the document. A single scattered U+200B is usually an interface wrapping hint; the meaningful case is one that repeats at regular intervals inside a word.

The tool found a no-break space (U+00A0). Is that bad?

Usually not. The no-break space is standard output from Word, Google Docs, HTML pages and number formats such as 10 000. If the text was copied from a web page, finding dozens of them is normal and means nothing on its own. It does matter inside code or data, where a compiler will choke on it and a CSV field will misalign, so cleaning it out of technical text makes sense.

Does using em dashes make me look like AI?

No, and the best evidence is this site itself. This blog's configuration has Goldmark's typographer enabled. Of the 72 Turkish post sources, 71 contain straight quotes, yet every one of them is published with curly quotes. Paste any paragraph from this site into this tool and it will report typographic characters that no human typed. The em dash works the same way: Word, macOS, Pandoc and Hugo all convert hyphens into dashes automatically. The mark identifies the publishing toolchain, not the author.

How does this tool decode hidden messages?

It tries four schemes. Scheme A is the Unicode tag block (U+E0000-U+E007F): the block mirrors ASCII one to one, U+E0020 through U+E007E map directly onto 0x20-0x7E, so the message is read off directly. Scheme B is variation selectors: U+FE00-FE0F holds sixteen values and U+E0100-U+E01EF holds two hundred and forty, exactly 256 together, so each selector carries one byte. Scheme C is zero width binary, where two distinct zero width characters stand for 0 and 1. Scheme D is the same idea in base three or four. The tool does not guess: to report a payload the characters have to form a contiguous run, the alphabet has to be exactly two, three or four characters wide, the length has to divide evenly and the decoded text has to be readable. If any of those fails, the tool does not claim to have found anything.

Why do bidirectional controls such as U+202E matter?

Because they mean the text is not what it appears to be. U+202D and U+202E force characters out of their natural direction. In source code that makes a file compile differently from how it reads, which is the basis of the attack class known as Trojan Source, tracked as CVE-2021-42574. The same trick disguises file extensions. This tool does more than count these characters: it also checks whether the blocks that were opened are balanced by the ones that close them, and an unbalanced count is reported as a finding in its own right.

What is the difference between NFC and NFKC, and which should I use?

NFC is lossless: it merges a separately encoded letter and accent into one character, and both look and meaning stay the same. It is safe almost always. NFKC is lossy: it also folds compatibility equivalents, so a fullwidth A becomes A, the fi ligature splits into fi, and a mathematical bold 𝐚 becomes a plain a. That is excellent for fixing search and sorting, but it irreversibly erases formatting that was placed deliberately. The rule is simple: NFKC for data cleanup and search matching, NFC for text that will be published.

A detector accused me falsely. What should I do?

What actually speaks to authorship is the process, not the text. Google Docs and Word version history record how the text grew minute by minute, and drafts, notes, outlines and source lists complete the picture. Ask whoever made the accusation, in writing, for the detector's false positive rate and for the independent study that established it. Feed the same detector something you wrote before these models existed; the result frequently refutes itself. Ask the institution to state in writing that a detector output alone cannot be the basis of a penalty. And know from the start that this tool produces no evidence either for you or against you.

How do I clean invisible characters out of a Word, Excel or Google Docs document?

Paste the text here, look at the marked up view first to see what is actually in it, then clean and paste the result back. Work in order: strip only the invisible characters first, because that step does not change how the document looks at all. Treat space normalisation separately, since a no-break space in Word is often deliberate. In Excel the usual problem is a U+00A0 or U+200B landing in a number cell and turning it into text, so after cleaning you have to convert the column back to a number. In Google Docs the most common source is pasting from a web page with formatting. If you use Notepad++, Show All Characters in the View menu displays the same characters in place.

Will cleaning break my formatting?

It depends on the options, and every clean can be undone. Removing invisible characters is almost always safe. Normalising spaces also converts deliberate no-break spaces, which can affect table alignment or number formats such as 10 000. Straightening quotes lowers typographic quality in text that is going to print. NFKC irreversibly flattens fullwidth and mathematical letters that may have been used on purpose. Turn everything on for code and data; for prose that will be published, start with the invisible character option only. After every run, read the per-category receipt and the before and after comparison.

Can this tool see Claude's or ChatGPT's watermark?

No, and no character based tool can. The method Anthropic describes is statistical: it adds no character to the text at all, it biases the distribution of the model's word choices according to a secret key. This tool only sees characters that are physically present, so it cannot see a watermark of that kind. Read that as an honest statement of the tool's limit rather than as a shortcoming: a tool telling you what it cannot see is better than one claiming to see what it cannot.