Skip to main content

Smart Character Cleaner — Fix Quotes, Dashes & Hidden Spaces

Word processors and AI assistants quietly swap your typing for typographic characters: curly quotes, em dashes, a single-character ellipsis, non-breaking spaces. Fine in print — but pasted into code, a config file, a form, or a CMS they cause syntax errors, failed validations, and mystery bugs. Paste the text here, choose which rules to apply, and get the plain-ASCII version with a count of every character that changed.

“curly” → "straight", ‘single’ → 'single'
— and – → - (or keep them)
… → three dots
non-breaking → normal space, zero-width fillers removed (joiners kept)

Cleaned text

The cleaned, plain-ASCII version appears here.

Draft it in Moda instead

Write and design in one place — Moda documents export clean text without the round trip.

Try Moda free →

Where smart characters come from

Word, Google Docs, Apple Notes, and most chat and AI writing tools apply "smart" substitution as you type: straight quotes become “curly” ones, double hyphens become em dashes (—), three dots become the single ellipsis character (…), and some layouts insert non-breaking spaces around punctuation. Copy that text into any context expecting plain ASCII and the substitutions come with it. Because generated text inherits these conventions heavily, an em dash or curly apostrophe in an unexpected place has also become a well-known tell of AI-drafted copy — cleaning them is now part of editing.

Why code and CMSes choke on them

To a compiler, “ (U+201C) is not a quote character — a pasted snippet with curly quotes fails with confusing syntax errors that look identical to correct code. YAML, JSON, and .env files are the same. Zero-width spaces are nastier: they render as nothing, so an API key or URL with one pasted in fails validation while looking perfectly correct on screen. The invisible-space rule replaces every non-breaking-space variant with a regular space and deletes zero-width characters outright.

What each rule does — and does not — touch

Quotes: all curly, low-9, and angle quotation marks become straight " and '. Dashes: em and en dashes become hyphens, or stay untouched when set to "keep" — keep is the right choice when the dashes are legitimate typography and you only want the quotes fixed. Ellipsis: … becomes three separate dots. Spaces: non-breaking and thin spaces become normal ones; the zero-width space, word joiner, and BOM are removed. Both joiners are deliberately preserved: the zero-width joiner holds emoji sequences together, and the zero-width non-joiner is a real orthographic character in Persian, Arabic, and many Indic scripts. Everything else in your text passes through unchanged.

Frequently asked questions

Will cleaning break my emoji or non-Latin text?

No. Multi-part emoji are held together by zero-width joiners and Persian, Arabic, and Indic words often depend on the zero-width non-joiner — the cleaner preserves both, removing only the characters that never render anywhere (zero-width space, word joiner, BOM).

Should I convert em dashes or keep them?

For prose headed to print or the web, em dashes are correct typography — set the rule to "keep" and fix only quotes and invisible spaces. Convert to hyphens when the destination is code, a plain-text config, or a style guide that bans them.

Why does the tool report changes I cannot see?

Non-breaking spaces look identical to normal spaces, and zero-width characters display as nothing at all. The per-rule counters expose them — a "3 changed" next to the invisible-spaces rule on visually clean text means three characters you could never have spotted by eye.

Does this remove other AI-text tells like markdown asterisks?

No — it only normalizes character-level substitutions (quotes, dashes, ellipses, spaces). Formatting artifacts like **bold** markers or bullet characters are structure, not encoding, and are better handled in your editor.

Related tools

← All tools