Logical records are not lines
A CSV record ends at a terminator that is outside quotes. A line break inside a quoted field is data. The support-ticket example above has four tickets spread over nine physical lines; the parser reports four records and shows, for each, the line range it covers.
That is why ParseCSV never splits a file on newlines before parsing quotes. The state machine walks the bytes once, tracking whether it is at the start of a record, inside an unquoted field, inside a quoted field or just after a quote.
Byte offsets, not character offsets
Positions are byte offsets into the file, so they stay correct with multibyte characters such as “ë”, “中” or emoji. A JavaScript string index would drift by one or more for every non-ASCII character; ParseCSV never mixes the two. You can jump to any byte offset or line number from the raw view.
Chunk-boundary safety
Files are read in chunks. A chunk can end in the middle of a multibyte character, between the CR and LF of a line ending, between the two quotes of an escaped quote or inside a long field. The parser carries that pending state explicitly, and the test suite parses hundreds of random files with random chunk sizes to prove the records, spans and issues are identical to an unsplit parse. You can run the same self-test on your own file under “Encoding & boundaries”.
Supported grammar
| Option | Supported values |
|---|---|
| Delimiter | Any single character (multi-character delimiters are refused, not truncated) |
| Quote | Double quote, single quote, or none |
| Escape | Doubled quote (RFC 4180), backslash, or none |
| Terminators | CRLF, LF or CR mixed; or exactly one of them |
| Comments | Optional marker, recognised only at the start of a record outside quotes |
| Encodings | UTF-8, UTF-16 LE/BE, Windows-1252, ISO-8859-2, Windows-1251, Mac Roman |
Questions
What is the difference between an empty field and an absent field?
An empty field exists but has zero length (two delimiters next to each other). An absent field is missing because the record is shorter than expected. ParseCSV keeps them distinct in every view and in JSON export, and only merges them if you choose padding in a CSV export, which is reported as a loss.
What happens to a file without a final newline?
The last record is complete; it is reported with terminator “EOF” and an informational note, not an error.
Are numbers converted?
No. Every value stays text. Type suggestions exist in the Schema tab, but they never change values.