Why Your CSV Shows Garbage Characters in Excel (and How to Fix It)

A practical guide — Excel, Google Sheets, Notepad++, and the automatic way.

Café becomes Café. José turns into José. Curly quotes explode into “ soup. Your file is not corrupted — this is an encoding mismatch. The CSV's text is stored as a sequence of bytes, and Excel is reading those bytes with the wrong decoder. On a US Windows machine, Excel's legacy CSV open assumes the file is in Windows-1252 (the old Windows Latin code page); most modern exports are in UTF-8. When a two-byte UTF-8 accent like é gets decoded as if it were two separate Windows-1252 characters, you get the classic é mojibake. The fix is to tell the reader which encoding the file actually is.

The one rule: mojibake is a reading problem, not a file problem. Don't re-type the accents — re-open the file with the right encoding and they come back.

Method 1: Excel import wizard (pick the encoding)

  1. In a blank workbook, go to Data → From Text/CSV and select your file.
  2. In the preview dialog, find File Origin. If the file came from a modern system or web export, choose 65001: Unicode (UTF-8). If it came from old Windows software, try 1252: Western European (Windows).
  3. Watch the preview grid: the accents should snap back to normal. If not, try the other option.
  4. Click Load. Done — nothing was retyped, and the original file is untouched.

Same rule as with leading zeros: never double-click the CSV. The wizard is the only path that lets you set the encoding before Excel commits to its guess.

Method 2: Convert the file once, fix it everywhere

If you control the file, the durable fix is to save it as UTF-8 so every program reads it right. In Notepad++: open the file, then Encoding → Character Sets → Western European → Windows-1252 — if the accents now look correct, you found the real encoding; then Encoding → Convert to UTF-8 and save. In VS Code: click the encoding label in the status bar, choose Reopen with Encoding to try 1252, then Save with Encoding → UTF-8.

One special note: Excel opens UTF-8 with a BOM (byte-order mark) correctly, but a UTF-8 file without a BOM is the one Excel misreads. Adding a BOM fixes Excel specifically — at the cost of a stray invisible character at the start of the file that can confuse other tools. If your CSV travels to more than Excel, prefer clean UTF-8 without BOM and use the import wizard.

Method 3: Google Sheets

Sheets auto-detects encodings and usually gets this right on upload via File → Import. If it doesn't, the fix is upstream: convert the file to UTF-8 with the steps above and re-import.

Method 4: Python (for the technical)

import csv

# If accents show as garbage, the file isn't UTF-8:
with open('customers.csv', newline='', encoding='windows-1252') as f:
    rows = list(csv.reader(f))

# utf-8-sig also strips a leading BOM if one is present:
with open('export.csv', newline='', encoding='utf-8-sig') as f:
    rows = list(csv.reader(f))

# Normalize to clean UTF-8 once, the proper way:
with open('customers.csv', newline='', encoding='windows-1252') as src:
    rows = list(csv.reader(src))
with open('customers_utf8.csv', 'w', newline='', encoding='utf-8') as dst:
    csv.writer(dst).writerows(rows)

The point is the encoding argument: windows-1252 to read legacy exports, utf-8-sig to read BOM files, and plain utf-8 to write the fixed file.

What if only some rows are garbled?

That means the file contains mixed encodings — one export glued onto another, or accented rows pasted in from somewhere else. No single encoding setting fixes that; the wrongly-encoded rows have to be converted individually. If the mojibake follows the pattern à plus a second garbled character, those rows were UTF-8 bytes read as Windows-1252 and can be repaired mechanically: encode the garbled text back to Windows-1252 bytes, then decode as UTF-8.

Scope note: encoding is about how bytes are read, not about cell contents — no cleaner can change which decoder Excel picks when you double-click. What a cleaner can do is make the file itself unambiguous: one consistent encoding (UTF-8), trimmed cells, no ragged rows, and no stray BOM — so whichever way the file gets opened, there's nothing left to misinterpret.

The one-click way

Most mangled CSVs start life as messy exports — mixed encodings, stray spaces, ragged rows — and every tool they pass through makes its own guesses about your data. CSV Cleaner converts to clean UTF-8, trims every cell, normalizes headers, and strips blank rows in one click, so the file Excel imports has nothing left to misread. $9 once, yours forever.

See CSV Cleaner

More CSV fixes: Why Excel Deletes Leading Zeros from CSV Files · How to Fix Numbers Stored as Text in CSV Files · CSV Cleaner

← All guides