CSV Validation Checklist: What Breaks an Import, Ordered by How Quietly
A CSV that opens does not mean a CSV that imports. The CSV validator scans the text once with an RFC 4180 state machine and reports each fault against a physical line number, counting the lines inside a multi-line quoted field.
Faults that change the data
| Finding | What it does downstream | Severity |
|---|---|---|
| Quote opened and never closed | Everything after it, possibly the rest of the file, becomes one field. Reported at the line the quote opened on, since that is where you fix it. | error |
Text after a closing quote ("Ann"x) | Parsers differ: some keep Annx, some raise, some drop x. | error |
| Row with a different field count than the header | Columns shift for that row, and a typed column fails or fills with the wrong data. | error |
| U+FFFD replacement characters | The original bytes were lost at decode time. Nothing downstream can recover them. | error |
Faults that depend on the importer
| Finding | Why it is only a warning |
|---|---|
Quote inside an unquoted field (Kyle "Reese") | Lenient parsers keep it, strict ones reject the file. |
| Duplicate or empty header names | Most tools keep the last value or invent a name; the data is not wrong, the access is ambiguous. |
| Mixed CRLF/LF/CR line endings | Usually harmless, sometimes produces phantom blank rows. |
| Blank lines | Skipped by some importers, imported as an empty row by others. |
| UTF-8 BOM | Excel wants it; others return it glued to the first column name (id). |
Looks like UTF-8 read as Windows-1252 (é) | A heuristic: the pattern is common in mojibake but can appear in legitimate text. |
Cell starting with =, +, -, @ | Spreadsheet formula risk; see formula injection. |
What it cannot tell you
- Whether a number column is really numeric, or a date is in the format you expect. The scanner does not type values.
- Whether the delimiter was guessed right on a file whose first record has no delimiter at all. Pick it in the dropdown.
- Whether the data is correct. A well-formed file can still be wrong.
Order of operations
- Fix the unclosed quote first; it hides every other problem below it.
- Fix ragged rows, then re-run, because one bad row often explains several.
- Re-export from the source with an explicit encoding rather than patching mojibake by hand (encoding guide).