Fix Weird Characters in a CSV (é, â, ’) Once and for All
You open a CSV and "café" reads as "café", "naïve" becomes "naïve", and a curly apostrophe shows up as "’". This garbled text has a name — mojibake — and it always comes from the same root cause: the file was saved in one character encoding and read in another. Once you understand the mismatch, the fix is quick.
What's Actually Happening
Most modern data is encoded as UTF-8, where accented and special characters are stored as multiple bytes. Mojibake appears when those UTF-8 bytes are read as a single-byte encoding like Windows-1252 or Latin-1. Each byte gets shown as its own character, so the one character "é" turns into the two characters "é".
How a single character breaks apart:
Correct (UTF-8 read as UTF-8): café
Broken (UTF-8 read as Latin-1): café
Common offenders:
é → é
â → â
ï → ï
' → ’ (curly apostrophe)
" → “ (curly quote)
– → – (en dash)Where Mojibake Comes From
On Windows, Excel saves a plain "CSV (Comma delimited)" file in the system locale encoding — often Windows-1252 — instead of UTF-8. Text pasted from Word, PDFs, or older systems frequently carries smart quotes and dashes that only survive in UTF-8. When that file is later opened by a tool that assumes UTF-8 (or the reverse), the bytes are misread and you get mojibake.
How to Fix It
If You Can Re-Export the Source File
The cleanest fix is to re-save with the right encoding. In Excel, use "Save As" and choose "CSV UTF-8 (Comma delimited) (.csv)" rather than plain CSV. In Google Sheets, downloading as CSV always produces UTF-8.
If You Only Have the Broken File
When the characters are already garbled, you can reverse the damage by re-interpreting the bytes. In Python, encode the broken string back to Latin-1 and decode it as UTF-8:
# Recover mojibake text in Python
fixed = garbled.encode("latin-1").decode("utf-8")
# When reading a file that may have a BOM, use utf-8-sig
import csv
with open("file.csv", encoding="utf-8-sig") as f:
rows = list(csv.reader(f))Don't confuse mojibake with the BOM. A leading "\ufeff" or "" on the first header is the UTF-8 byte order mark, a separate issue from misread accents. If your first column name looks off, see our guide on fixing the UTF-8 BOM.
The Faster Way: Automated Re-Encoding
If you don't want to write code or babysit Excel's Save As dialog, PipeSheets detects the source encoding, repairs misread characters, and exports clean UTF-8 automatically. Upload the garbled file, run Quick Clean, and download a copy where "café" reads as "café" everywhere.
Try the automated solution
PipeSheets can fix these issues automatically. Clean your first file free.
Clean Your CSV