Unicode Cleaner
Clean eight specific Unicode character types, with your original text kept alongside the result. Review the rules before applying them; joiners are preserved by default.
Before
Cleaning runs only when you ask, in this tab. No text is sent or saved. The limit counts UTF-16 units; an astral emoji uses two. Long pastes are never cut.
After
Your cleaned text will appear here. The original stays in the Before panel.
Enter text, then choose Clean Unicode.
Targeted cleanup, not a Unicode reset
By default, zero-width spaces, byte-order marks and soft hyphens are removed. Non-breaking spaces become ordinary spaces, and line separators become newlines. The other three types are preserved unless you opt in.
Even these characters can be intentional. This tool does not remove accents, transliterate writing systems, normalize NFC or NFKC, or change quotes and dashes. It does not clean every Unicode character or detect AI writing.
Characters removed and characters replaced are separate occurrence counts. Changing a rule or editing the original clears the result until you clean again.
Before and after, default options
Three texts cleaned with the default options by this page’s own code. In the Before pane, each of the eight tracked characters is shown as ▯ so you can see where it was; the After pane is the exact output.
▯Please send the▯ final draft by Fri▯day.
Please send the final draft by Friday.
- Characters removed
- 3
- Characters replaced
- 0
The byte-order mark at the start, the zero-width space after “the” and the soft hyphen inside “Friday” go. Nothing visible changes, and an exact search for “Friday” or “the final” now matches.
Ask Mr▯Smith: the order is 1▯000 units.▯Ship by Friday.
Ask Mr Smith: the order is 1 000 units. Ship by Friday.
- Characters removed
- 0
- Characters replaced
- 3
Each non-breaking space becomes an ordinary space, the thousands separator in 1 000 included: the cleaner cannot tell an intentional one apart, so “1” and “000” may now wrap onto separate lines. Uncheck that rule to keep them. The line separator becomes a newline.
The 👩▯💻 emoji and the Persian word می▯خواهم.
The 👩💻 emoji and the Persian word میخواهم.
- Characters removed
- 0
- Characters replaced
- 0
The zero-width joiner holds 👩💻 together, and the zero-width non-joiner keeps the Persian word میخواهم (“I want”) correctly shaped. Both stay unless you check their rules.
The eight rules
Each of the eight characters has its own checkbox. These are the defaults, and the reason for each one. The cleaner does nothing else: it does not normalize to NFC or NFKC, change quotes, dashes or ellipses, replace look-alike letters, or merge and trim spaces.
| Character | By default, and why |
|---|---|
Zero-width spaceU+200B | RemovedRenders nothing but splits a word for search and counting. Uncheck it for scripts such as Thai or Khmer, where it can mark word boundaries. |
Zero-width non-joinerU+200C | Preserved unless checkedBreaks a cursive join or ligature on purpose. Persian and other scripts need it inside words. |
Zero-width joinerU+200D | Preserved unless checkedJoins glyphs and holds emoji sequences such as 👩💻 together. Removing it splits them. |
Word joinerU+2060 | Preserved unless checkedPrevents a line break and leaves no visible trace. Removing it can change where lines wrap. |
Byte-order markU+FEFF | RemovedA file signature. Unicode discourages every other use, so inside a text it has no job. |
Soft hyphenU+00AD | RemovedRenders only at a line break, so it hides in plain sight and splits the word for search. Removing it also drops that hyphenation point. |
Non-breaking spaceU+00A0 | Replaced with a spaceLooks like a space, so a typed space never matches it. It becomes an ordinary space rather than nothing, so words stay apart, but pairs such as 10 km or 1 000 can then wrap. |
Line separatorU+2028 | Replaced with a newlineForces a line break; legal, but rare in text a person typed. It becomes a newline, so the break stays where it was. |
Frequently asked questions
How is cleaning different from detecting invisible characters?
The detector only identifies recognized characters. Unicode Cleaner creates a separate output using your selected rules. It handles the same eight character types; it does not normalize all Unicode, transliterate letters or remove every unusual character. It does not read or remove a statistical AI watermark, which is a pattern in word choice and not a character.
What do the default cleaning options change?
By default, zero-width spaces, byte-order marks and soft hyphens are removed, non-breaking spaces become ordinary spaces, and line separators become newlines. Zero-width joiners, non-joiners and word joiners stay unless you opt in to removing them. Those characters can affect letters, emoji and line breaks, so review each option.
Will cleaning overwrite my original or copy text automatically?
No. Your input stays in the original field while the output and change counts show the selected transformations. Review both before choosing Copy result. Processing stays in your browser, and opening another tool or the editor does not transfer your text.
Related tools
Related reading
In the AI watermark database
Want to polish a draft?
Open the editor to review writing suggestions. Your text is not transferred.