Unicode Cleaner

“Unicode cleaner” gets used for three different jobs — normalizing accented letters, transliterating them to plain ASCII, and stripping invisible format characters — and a tool that claims to do all three usually does none of them predictably. This one does the third job only: it removes Unicode's invisible format and reserved characters and leaves every visible character, accented or not, exactly as you typed it.

Cleaning happens in your browser: that text never leaves this page, and there is no upload, no account and no limit. Rewrite is the exception — that one sends your text to our server.

Three jobs called "unicode cleaner"

What the categories involved actually mean

Unicode groups every character into a category, and the ones relevant here are worth knowing by name if you work with text programmatically:

A short, concrete example

Copy a short reply out of a chat window into a JavaScript console and check its length against what you'd expect by counting letters on screen:

"hello​".length returns 6, not 5 — even though it prints as "hello" with nothing visibly different. The extra codepoint is a zero-width space (U+200B) that arrived with the paste. Running the same text through this cleaner brings the length back to 5, with nothing else about the string changed.

The one visible change this makes

The checkbox above the box is the exception to "invisible only": switch it on and curly quotes, en dashes and em dashes are straightened into a plain apostrophe, quote mark or hyphen. Those are visible characters, so the tool treats changing them as optional and off by default is not the setting — on by default is, but the box is right there if you'd rather keep the original punctuation.

Questions

Does this normalize Unicode (NFC/NFKC)?

No. Normalization picks a consistent encoding for characters that can be represented more than one way, and that's a job for your programming language's built-in normalize() function, not a paste box — doing it wrong can be worse than not doing it at all.

Does this convert accented letters to plain ASCII?

No, and not by accident — é, ñ, ü and every other accented letter you paste in come out exactly as you typed them. Transliterating them is a deliberate, lossy choice that belongs in code you control, not in a general cleaning tool.

What are Unicode categories Cf, Cs and Co?

Cf is Format — invisible characters that affect processing, like zero-width joiners and directional marks. Co is Private Use — a block reserved for custom fonts with no universal meaning. Cs is Surrogate — codepoints only valid in UTF-16 pairs. This cleaner's job is mainly Cf, plus the private-use block.

Why would a lone surrogate character show up in normal text?

Usually because a piece of software along the way converted between text encodings incorrectly and left half of a surrogate pair behind. That's a different, less common bug than the invisible-character debris this tool targets, and worth checking your encoding pipeline for separately.

Is this safe to run on source code, not just prose?

It only touches characters with no visible shape, so no code logic should change — but treat any bulk text operation on code the way you'd treat any other edit: keep it under version control so you can diff the result before you trust it.

What this tool cannot remove

There are two different things people call an "AI watermark".

  • Invisible and typographic characters. This tool removes named characters that carry no visible glyph at all, as defined by the Unicode standard — not a number we made up. It also turns different space variants, including the narrow no-break space, into an ordinary space. Curly quotes and dashes go through a separate, optional step — typographic replacements, switched on by default; turn that option off and they stay exactly as typed. It also clears the three Unicode private-use ranges, including the tag range U+E0000–U+E007F used to hide data in plain text — those ranges hold no standard characters of their own, so we describe them rather than dress them up as a character count.
  • A statistical watermark in the word choice itself. Google's SynthID-Text, live in Gemini since May 2024, is documented to change no characters at all, so no character cleaner — ours included — has anything to catch. Anthropic has marked Claude's output the same way since 2 August 2026, to comply with the EU AI Act, but its own explanation (support.claude.com) confirms only that the mark exists, not how it works — so we can't promise it is built the same way SynthID is. What we can say: a character cleaner like this one only ever touches Unicode characters, and no watermark that relied on those would survive an ordinary copy-paste, so there is nothing here for it to remove either way. As of 10 September 2026, OpenAI's own content-provenance page lists a text watermark for neither ChatGPT nor its API.

If a tool promises to strip "the AI watermark" without making this distinction, it is describing the first thing while letting you believe it does the second.

Related tools

It is one cleaner behind all of these pages — the same characters, the same button. Only the explanation around it changes, so pick whichever matches your problem.

Illustrated portrait of Sam RidderBy Sam Ridder — I build and run TextNinja on my own hardware, on my own. Who I am.