Skip to content

UTF-8 to ASCII

Paste text and get a plain ASCII version that old systems accept. Accents are dropped (é → e), curly quotes and dashes become straight ones, € becomes EUR, and you choose what happens to characters like 東 or 😀 that have no ASCII version.

é → e · ß → ss · “ ” → " · ’ → ' · — → - · € → EUR

No ASCII version:
Fine-tune
Zoe's Cafe - EUR5

5 characters swapped for ASCII

Everything runs in your browser; nothing is uploaded.

How to convert UTF-8 to ASCII

ASCII has only 128 characters: English letters, digits, basic punctuation and a few control codes. Converting UTF-8 text to ASCII means replacing everything else with the closest plain character, a method usually called transliteration.

  1. Paste your text, or open a text or CSV file.
  2. Keep Swap é → e on to turn accented letters, curly quotes, dashes and symbols into their ASCII look-alikes.
  3. Choose what happens to characters that have no look-alike: a ?, nothing, or a code that keeps the character recoverable.
  4. Copy the result or download it as a .txt file. The status line lists anything that couldn’t be converted.

What each character turns into

ASCII replacements for common non-ASCII characters
CharacterASCIINotes
é è ê ë á à ç ñe e e e a a c nThe accent is dropped and the letter kept
ü ö äu o aOr ue oe ae with German style in Fine-tune
ßssGerman sharp s
æ œ ø å łae oe o a lLetters that aren’t accents need their own rule
“ ” and ‘ ’" and 'Curly quotes from Word, phones and Google Docs
– —-En dash and em dash
…...One character becomes three dots
€ £ ¥EUR GBP JPYCurrency codes, since ASCII only has $
© ® ™(C) (R) TM
½ ² fi1/2 2 fiFractions, superscripts and ligatures
no-break spacespaceCommon in text copied from web pages
zero-width space, soft hyphenremovedInvisible characters that break searches and imports
東 😀 °your choiceNo ASCII look-alike; see below

Example: cleaning a price list for an old till

A café’s menu is typed in a word processor and imported into a till that only takes ASCII. One line reads:

Zoë’s Café — €5

Step 1: Drop the accents

ë → e · é → e → Zoe’s Cafe — €5

Step 2: Straighten the punctuation

’ → ' · — → - → Zoe's Cafe - €5

Step 3: Spell out the symbol

€ → EUR → Zoe's Cafe - EUR5

Result: Zoe's Cafe - EUR5. Every character is now ASCII and the line still reads correctly. A plain replace with ? converter would have given Zo?'s Caf? ? ?5, which is why look-alikes matter.

Characters with no ASCII version

Chinese, Japanese, Arabic and other scripts, emoji, and symbols such as ° have no ASCII look-alike. Pick what suits the system you are sending the text to. For Tōkyō 東京:

Options for characters that can't be turned into ASCII
OptionTōkyō 東京 becomesUse it when
?Tokyo ??You want to see where something was lost
removeTokyoClean text matters more than completeness, e.g. file names (a trailing space is left behind)
日Tokyo 東京The text goes into an HTML or XML page, which shows the original characters
\u65E5Tokyo \u6771\u4EACThe text goes into JSON, Java or JavaScript, which read the escapes back

Only the last two keep the original recoverable. Once a character has become ? or been removed, nothing can tell you what it was, so keep the UTF-8 original.

Is UTF-8 the same as ASCII?

Not quite: UTF-8 contains ASCII. The first 128 UTF-8 characters are exactly ASCII, stored as the same single bytes, so a plain ASCII file is already a valid UTF-8 file. UTF-8 then adds over a million more characters, each stored as 2 to 4 bytes. You can see those bytes with the UTF-8 Converter.

You only need to convert when something accepts ASCII alone: older databases and mainframes, some bank payment references, label printers, legacy CSV imports, or file names and user names that must stay simple. Everywhere else, keep UTF-8, since converting always loses something.

Converting UTF-8 to ASCII with iconv, Python, JavaScript and PHP

# Command line (Linux)
iconv -f UTF-8 -t ASCII//TRANSLIT input.txt > output.txt

# Python: pip install unidecode
from unidecode import unidecode
unidecode("Zoë’s Café — €5")        # "Zoe's Cafe -- EUR5"

// JavaScript: accents only
text.normalize("NFKD").replace(/[\u0300-\u036f]/g, "")

// PHP (intl extension)
transliterator_transliterate("Any-Latin; Latin-ASCII", $text);

Each one behaves a little differently. iconv’s results depend on the system: on Linux with a UTF-8 locale it gives Cafe (in the bare C locale, Caf?), but the iconv on macOS and in Windows PHP writes Caf'e, with the accent as a separate character. Python’s popular unicodedata.normalize('NFKD', s).encode('ascii', 'ignore') one-liner removes accents but silently deletes ’, — and € too (Zoes Cafe 5). The JavaScript line strips accents only, leaving quotes and symbols for you to handle. Unidecode also spells out Chinese and Japanese in Latin letters, so 東京 becomes Dong Jing.

Frequently asked questions

Does converting to ASCII lose information?

Yes, unless you use the &#…; or \u options. Accents, curly quotes and symbols are simplified, and the original can’t be rebuilt from the ASCII text, so keep a copy of the original.

Why did ü become u and not ue?

Dropping the accent is the general rule for every language. German has its own convention of writing ü as ue, ö as oe and ä as ae; turn on German style in Fine-tune to use it.

Why does my converted text have question marks?

Those characters have no ASCII look-alike: Chinese, Japanese and other scripts, emoji, or symbols like °. The status line lists them. Choose remove, &#…; or \u instead if a ? is not wanted.

Is ASCII text also valid UTF-8?

Yes. ASCII is the first 128 characters of UTF-8 with the same bytes, so the converted text can be used anywhere UTF-8 is expected.

Sources