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 the invisible format and reserved characters that are just clutter, leaves the ones still doing a spelling job alone, and leaves every visible character, accented or not, exactly as you typed it, aside from one opt-in exception, below.

Related: Handwriting to Font: Free Handwriting Font Generator.

Last updated: September 2026

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: on by default, not off, 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 is meant by "invisible unicode" characters?

Invisible Unicode characters are codepoints the standard defines with no visible glyph at all: mainly the Cf (Format) category above, plus a few outside it such as the private-use block. They take up no width and draw nothing on screen, which is exactly why an ordinary find-and-replace or a proofreading pass never catches them. This cleaner's whole job is finding and removing the ones that are just leftover formatting, while leaving the ones still doing a real job: a joiner holding an emoji together, or one that is part of Persian spelling, alone.

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, which Google says has marked text in the Gemini app and on the web since May 2024, steers which words get picked and adds no characters at all, so no character cleaner, ours included, has anything to catch. Anthropic says text from its newer Claude models (launched on or after 2 August 2026) carries a statistical watermark applied as the model picks its words, with nothing added to the text (anthropic.com), so no character cleaner touches it. OpenAI announced one for ChatGPT in October 2026 (as reported by the press) that is statistical too, starting in the EU.

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.

ShinobiTools · KvK 42147182 · info@shinobitools.com