Remove Accents

Turn café into cafe and Björk into Bjork — including the letters that Unicode refuses to decompose, like ß, ø and ł.

Runs 100% in your browserNothing is uploaded to a serverInstant results

Options

Also clean up

Each of these runs the same code as its own page. The full set, all switched on at once, is the text cleaner.

Input

Result

Copied!

Before and after

0
Characters in
0
Characters out
0
Characters removed
0
Words in → out

Why NFKD alone is not enough

The standard trick for this is one line long: normalise to NFD or NFKD, then delete every combining mark. Unicode stores é as either a single precomposed character or as an e followed by a combining acute accent, and normalising picks the second form so the accent can be deleted separately. That handles é, ü, ñ, å, č, ệ and the great majority of accented Latin letters, including the stacked diacritics in Vietnamese.

It also silently destroys a specific set of letters, which is the part the one-liner never mentions. ß, æ, œ, ø, đ, ð, þ, ł, ħ, ŋ and ı are not a base letter plus a mark — they are letters in their own right, with no decomposition at all. NFKD leaves them exactly as they were, and the ASCII pass that follows then deletes them, so Straße becomes Strae, Łódź becomes ódź and Guðmundsdóttir loses a consonant. With the spell-out option on, this page maps each of them to the letters they are conventionally written as — ß to ss, æ to ae, ø to o, ł to l — which is the same map the site's slugify tool uses.

The mode select decides how far the pass reaches. Fold accented Latin letters is the default: accents come off, and anything that is not a Latin letter — Greek, Cyrillic, Arabic, Chinese — is left exactly as it was. Drop the accent marks only is the gentler version, useful for Greek or Cyrillic text where you want the diacritics gone but the script kept; it uses NFD rather than NFKD so ½ stays ½ and the fi ligature stays a ligature instead of being taken apart. Fold then delete everything outside ASCII is the strict one, for a system that genuinely cannot store anything else.

This is the right tool when a name has to match across two systems, when a URL or a filename needs to be portable, or when a search index does not fold accents itself and “señor” and “senor” have to find each other. It is the wrong tool for changing how a name is displayed to the person it belongs to.

A name list going into a legacy system

Pasted in
Björk Guðmundsdóttir, François, Straße, Łódź, 你好
Comes out
Fold, spelling out the undecomposable letters:
Bjork Gudmundsdottir, Francois, Strasse, Lodz, 你好

The same line in ASCII mode drops 你好 as well.

Accents questions

Why does ß become “ss” rather than “s”?

Because that is how German writes it when the character is not available — Straße has always been Strasse in ASCII, and the capital form has historically been SS. ß has no Unicode decomposition, so a normalise-and-strip pass cannot produce anything sensible from it and an ASCII filter simply deletes it. Spelling it out by name is the only answer that keeps the word recognisable, and the same applies to æ → ae, œ → oe, ø → o, đ → d, þ → th and ł → l.

Does it handle Vietnamese, Polish and Czech?

Yes, and they exercise different parts of it. Vietnamese stacks two marks on one letter — ệ is e with a circumflex and a dot below — and normalisation separates both, so it folds to e. Czech č š ž and Polish ą ę ć ń ś ź ż are ordinary base-plus-mark characters and fold cleanly. Polish ł is the exception in that set, since it is a barred l with no decomposition, and it is in the spell-out map for exactly that reason.

What is the difference between the three modes?

“Fold” takes the accents off Latin letters and leaves every other script untouched, which is what most people want. “Marks only” removes combining marks from any script without folding anything — useful for stripping Greek or Hebrew diacritics — and avoids compatibility decomposition, so ½ and ligatures survive. “ASCII” folds first and then deletes anything still outside the ASCII range, which is destructive for non-Latin text and is meant for systems that cannot store it at all.