CSViser ADVISER

Remove BOM from CSV file

Excel silently adds a UTF-8 byte-order mark to CSV exports. Most parsers choke on it. Upload your file — CSViser detects and strips the BOM in one click.

Upload your CSV with BOM

CSV, XLSX, or JSON — any size

Free account — takes 10 seconds to sign up

After upload: go to Fix issues tab → check Remove byte-order mark (BOM) → Apply.

What is a BOM and why does it break things?

A byte-order mark (BOM) is a hidden sequence of three bytes — 0xEF 0xBB 0xBF — that Microsoft Excel prepends to UTF-8 CSV exports as a signal to other Microsoft tools that the file is UTF-8. The problem: this sequence is invisible in text editors and spreadsheet apps, but it appears as literal characters  or  at the very start of the file when processed by tools that don't understand it.

Concretely, a CSV that starts with id,name,email becomes id,name,email after Excel exports it. Python's built-in csv.reader reads the first column header as id rather than id, so row["id"] returns nothing and row["id"] returns the value. PostgreSQL's COPY FROM command errors with "invalid input syntax". Ruby's CSV library raises a parse error. Pandas silently creates a column named id that doesn't match any downstream key.

When does Excel add the BOM?

Excel adds the BOM when you use File → Save As → CSV UTF-8 (with BOM) — the option that explicitly says "UTF-8" in its name on Windows. The plain "CSV" option saves in the system codepage (usually Windows-1252) without a BOM, which causes a different set of encoding problems. There is no Excel option that saves UTF-8 without a BOM; you need an external tool to strip it.

Google Sheets, LibreOffice Calc, and Numbers do not add a BOM. The issue is specific to Microsoft Excel on Windows.

Quick fix in Python, if you prefer code

Use encoding="utf-8-sig" when opening the file — Python strips the BOM automatically:

import csv

with open("data.csv", encoding="utf-8-sig") as f:
    reader = csv.DictReader(f)
    for row in reader:
        print(row["id"])  # works correctly

For a no-code solution, or if you're working with XLSX or need additional cleanup at the same time, use the tool above.

Frequently asked questions

Does removing the BOM affect the file's encoding?

No. The file stays UTF-8 — only the three-byte prefix is removed. All characters remain identical, including accented letters, Cyrillic, CJK, and emoji.

How do I tell if my CSV has a BOM?

Open the file in a hex editor and check the first three bytes. In a text editor, enable "Show invisible characters" — the BOM may appear as EF BB BF or a zero-width character at position 0. Or just upload it here — CSViser detects it automatically and shows a warning in the Fix issues tab.