Open a CSV, see it as a table, and find out what is wrong with it and where.
Everything happens inside your browser — the file is never uploaded, so a customer list stays on your machine.
Drop a CSV here, or click to choose oneThe file stays on your device. The character encoding is detected automatically.
Both samples are Japanese text on purpose. Encoding detection has nothing to do
when a file is pure ASCII — every candidate gives the same bytes back — so a sample that shows
Shift_JIS being told apart from UTF-8 has to be non-ASCII. The samples are also what a spreadsheet
exports on a Japanese Windows machine, which is where most of these broken files come from.
What was read
Encoding
Delimiter
Rows / columns
—
Line endings / BOM
—
Findings
Preview
Rows whose column count differs from the header, and places where quoting is broken, are highlighted. The first 500 rows are shown.
Per-column diagnostics
Export
Normalized means written the way RFC 4180 describes: CRLF line endings, quotes only where they are
needed, and inner " doubled. The BOM version opens correctly in Excel without mangling
non-ASCII text.
What this tool looks at (and what it does not)
Encoding detection: the BOM is checked first. If there is none, the bytes are decoded
strictly as UTF-8, Shift_JIS (Windows-31J), EUC-JP and UTF-16 in turn; a candidate is dropped
the moment a single byte breaks its rules. If more than one survives, the winner is chosen by how
much the result looks like real text. The reason is printed on screen, and if the top two are
close, the tool says so instead of pretending to be sure.
A pure-ASCII file is reported as UTF-8, because every candidate would give the same result.
Delimiter detection: ,Tab; and | are
each used to actually parse the whole file, and the one that makes the column counts agree
best wins. Delimiters inside quotes are not counted.
How it is broken: unclosed quotes, stray characters right after a closing quote, rows whose
column count differs from the header, mixed line endings, duplicated header names and fully
duplicated rows. Positions are given as line numbers in the file — a record containing a
newline inside quotes spans several lines, so line number and record number drift apart, and the
tool shows both.
Columns Excel will corrupt: numbers with a leading zero (0123 — ZIP codes,
employee IDs), values read as dates (1-2, 3/4), numbers longer than 15
digits (the tail is rounded to zeros), and cells starting with = (executed as a
formula — this is the CSV injection vector). The file itself is valid in all these cases;
it is the spreadsheet that changes the data, so these are reported separately from parse errors.
Not checked: whether the content makes business sense, and files large enough to matter
(everything is held in memory).
How it is verified: the parser and the detectors are checked against Python's
csv module over 800 generated files and 17,010 cells. The test script is
in the repository,
and it is run against this English page as well.
This page is generated from the Japanese one: blank out the contents of every string
literal and the two files are byte-for-byte identical, which is checked on every build.
Only the wording differs — never the code.