If a CSV looks normal in one app but broken in Excel, the file is usually not corrupted. Excel is reading the bytes with the wrong character encoding.
The classic symptoms:
cafe -> café
niño -> niño
it's -> it’s
"hello" -> “helloâ€
€10 -> €10
This is called mojibake: text encoded one way, decoded another way.
Why this happens
CSV files are plain text, but plain text still needs an encoding. UTF-8, Windows-1252 and Latin-1 all map bytes to characters differently.
Modern web apps usually export UTF-8. Older Windows software often expects Windows-1252. Excel on Windows may guess the local Windows encoding when you double-click a .csv, especially if the file has no UTF-8 BOM.
So the file may be valid UTF-8, but Excel opens it as Windows-1252. The bytes for é become é.
Fast fix: convert to UTF-8 with BOM
For CSVs that need to open cleanly in Excel, UTF-8 with BOM is the safest target.
- Open the CSV encoding converter.
- Upload the broken CSV.
- Leave source encoding on auto-detect, or choose Windows-1252 if auto-detect is wrong.
- Choose UTF-8 with BOM as the output.
- Download the fixed file and open it in Excel.
The BOM is a tiny marker at the start of the file that tells Excel, “read this as UTF-8.”
Excel-only fix
If you do not want to convert the file, import instead of double-clicking:
- Open Excel.
- Go to Data -> From Text/CSV.
- Pick the file.
- Set File Origin to 65001: Unicode (UTF-8), Windows-1252, or the encoding that matches the file.
- Check the preview before loading.
This is slower, but it keeps you in Excel.
How to recognize the source encoding
Use these clues:
| Symptom | Likely problem |
|---|---|
é, ñ, ü | UTF-8 read as Windows-1252 |
’, “, †| UTF-8 smart punctuation read as Windows-1252 |
? replacing accents | Saved into an encoding that could not represent the character |
 at the start of the first header | UTF-8 BOM shown as text |
If you are not sure, duplicate the file before experimenting so you do not overwrite the only copy.
Python fix
For repeatable workflows, convert with pandas:
import pandas as pd
df = pd.read_csv("broken.csv", encoding="cp1252")
df.to_csv("fixed.csv", index=False, encoding="utf-8-sig")
utf-8-sig writes UTF-8 with BOM, which is friendlier to Excel.
Prevent it next time
When exporting CSVs for business users, choose CSV UTF-8 when the app offers it. If the receiving audience is mostly Excel users on Windows, use UTF-8 with BOM.
After fixing encoding, check the delimiter too. A correctly encoded file can still open in one column if Excel expects semicolons instead of commas. Use the comma-delimited CSV converter for that part.