CSV inspector and UTF-8 export
Check the structure of a CSV file in your browser: choose how the bytes are decoded, choose the separator, and see rows, columns, malformed quoting and the values a spreadsheet is likely to change. Then save the same values back as UTF-8 CSV, with or without a BOM.
Your file stays in this browser
The file you select is read by this page only. Nothing is uploaded, no external API is called, and neither the file name nor its contents are written to the address bar, to cookies or to browser storage. Closing the tab discards everything. You can confirm this by opening your browser developer tools on the Network tab before you inspect a file.
Inspect a CSV
Result
Rows and columns
What to check before importing
Malformed CSV
Preview
At most 50 rows and 30 columns are drawn, and each cell shows at most 200 characters. Every value is displayed literally as text: a value such as a script tag or =HYPERLINK() appears as the characters it contains and is never interpreted or run. Display limits change what you see here, not the values themselves.
Scroll horizontally to see more columns
Per column
Download as UTF-8 CSV
The download is built from every value that was parsed, not only the part shown in the preview: quotes, line breaks inside values, leading zeros and empty fields are preserved in full. Values are quoted where the CSV rules require it, never edited. When the quoting in the input breaks the CSV rules, the download is disabled instead, because the values would then be a guess.
A BOM fixes decoding, not interpretation
A UTF-8 BOM tells Excel which encoding the bytes use, so Japanese text stops appearing as garbled characters when the file is opened by double-clicking. It does nothing about what Excel does after decoding: 007 can still become 7, 1-2 can still become a date, and a value beginning with = can still be treated as a formula. To control that, import through Data > Get Data > From Text or CSV and set the column type instead of opening the file directly.
Formula candidates are reported, not rewritten
Values starting with =, +, - or @ are listed so you can decide what to do with them. This tool never inserts an apostrophe, never adds a leading space and never changes such a value in the download, because that would silently corrupt identifiers that legitimately start with those characters. If you need those values inert in a spreadsheet, set the column to Text during import.
Limits of this tool
- The size limit is 2,097,152 bytes. A larger file is refused with a message rather than partly read.
- UTF-8 and Shift_JIS are the only decodings offered. UTF-16 files are refused with an explanation.
- The encoding is never guessed. A report that bytes are valid UTF-8 is a statement about the bytes, not an identification, because many byte strings decode without error under more than one encoding.
- The download is always UTF-8 comma-separated. This tool does not write Shift_JIS files.
- The first row is not assumed to be a header, so columns are numbered rather than named.
- The preview is bounded to 50 rows, 30 columns and 200 characters per cell. Statistics cover every row that was parsed, and the download contains every value in full.
- When the input breaks the CSV quoting rules, the values are a recovery reading rather than a faithful one, so the download is disabled until the original file is corrected. Rows with differing column counts are not a quoting violation and stay downloadable.
- When bytes have a valid shape for the selected encoding but no character is defined for them, the failure is reported without a byte position, because the position cannot be identified in that case.
Use the CSV inspector from a terminal
For repeat checks and scripts, the open-source faultnote-csv CLI uses the same parsing core. It reads UTF-8 or Shift_JIS locally, prints a JSON report when requested and refuses to overwrite existing files. Node.js 24 or newer is required.