Strip accents and transliterate text to plain ASCII
Turn café, Straße, Ærøskøbing and Москва into ASCII-safe text for slugs, filenames, search keys and CSV cleanup. Choose full transliteration or conservative mark removal, decide what happens to unmapped characters, and keep selected letters when they matter.
About this tool
accent-stripper converts Unicode text into ASCII-friendly text. It is for the everyday cleanup jobs where accents and non-ASCII letters break matching, filenames, URLs, search keys or legacy systems: café becomes cafe, Straße becomes Strasse, Ærøskøbing becomes AEroskobing, and Москва becomes Moskva.
The default Transliterate to ASCII mode uses a transliteration table, not just Unicode decomposition. That matters for letters such as ß, ø, Æ, Ł, Đ, Greek, Cyrillic and CJK characters, because many of them do not carry a removable combining accent. For a conservative normalization pass, switch to Marks only: it removes combining marks (é → e) but leaves letters like ß or Ж alone unless your unmapped policy removes or replaces them.
Worked example
Input:
Crème Brûlée à la Française — Straße, Ærøskøbing, Москва
Default output:
Creme Brulee a la Francaise -- Strasse, AEroskobing, Moskva
For slug preparation, enable lowercase and collapse whitespace:
Déjà Vu: Señor Piñata!
becomes:
deja vu: senor pinata!
You can then pass that through a slugifier or punctuation filter if you need dashes instead of spaces.
Options and limits
- Conversion mode controls the core behavior.
transliterateaims for readable ASCII equivalents;marks-onlyremoves combining marks and is deliberately narrower. - Characters still non-ASCII chooses what happens after conversion: keep them, remove them, or replace each one with the replacement text.
- Replacement text must be ASCII and at most 8 characters. It only applies when the unmapped policy is
replace. - Keep these characters protects literal non-ASCII characters from conversion. Use this when a language-specific letter such as
ñmust remain distinct. - Lowercase result runs after conversion, so transliterated uppercase letters become lowercase too.
- Collapse whitespace trims each line and squeezes spaces/tabs to one plain space while preserving line breaks.
- Return JSON audit report returns the converted text plus counts of input characters, output characters, converted/kept/unmapped characters, and whether the final output is pure ASCII.
- The input limit is 200,000 characters per run. Split larger documents.
- This tool does not translate words between languages. It approximates characters, so names and addresses remain recognizable but not linguistically perfect.
FAQ
Does this only remove accents, or does it transliterate too?
The default mode transliterates. It handles plain accents (é → e) and characters that do not have removable marks (ß → ss, ø → o, Æ → AE, Ж → Zh). Switch to Marks only if you want the narrower Unicode-decomposition behavior that only drops combining accents.
Why did some characters stay non-ASCII?
Either you used Marks only, you protected them with Keep these characters, or the transliteration table had no ASCII spelling for them. Set Characters still non-ASCII to remove or replace when the output must be strict ASCII, or enable the JSON audit report to see how many characters were unmapped.
Can I keep ñ while stripping other accents?
Yes. Put ñ in Keep these characters. Then mañana café becomes mañana cafe: the protected ñ stays, while the accented é is converted. The keep list is literal, so add each character you want protected.
Is this a full slug generator?
No. It prepares text for a slug by removing accents, optional lowercasing, and optional whitespace collapse. It intentionally does not remove punctuation, choose separators, enforce uniqueness, or apply site-specific URL rules. Chain it with a slug or regex cleanup tool when you need that final formatting.
Is my text uploaded?
No. The same Rust core runs locally in the WebAssembly page and in the CLI. The text is processed in your browser or terminal, not sent to a server.
Developer & Automation Access
Run it from the terminal
Same engine as this page, headless — via the gizza CLI:
gizza tool accent-stripper "Crème Brûlée à la Française — Straße, Ærøskøbing, Москва"New to the CLI? Get gizza →
Open it by URL
Pre-fill and auto-run this tool with query parameters — the names match the API/CLI:
https://gizza.ai/tools/accent-stripper/?input=Cr%C3%A8me%20Br%C3%BBl%C3%A9e%20%C3%A0%20la%20Fran%C3%A7aise%20%E2%80%94%20Stra%C3%9Fe%2C%20%C3%86r%C3%B8sk%C3%B8bing%2C%20%D0%9C%D0%BE%D1%81%D0%BA%D0%B2%D0%B0&mode=transliterate&unmapped=keep&replacement=%3F&keep=%C3%B1%2C%C3%B8&lowercase=true&collapse_whitespace=true&include_report=trueMachine-readable descriptor: tool.json — title + parameters JSON Schema for agents.
