TSV to CSV converter
Spreadsheet importers and CSV parsers want commas, not tabs. This page reads your TSV on literal tab characters, keeps every cell intact, and writes standard comma-separated rows — quoting only the cells that would otherwise split or break a line.
Quoted fields are re-quoted only when a comma or newline needs protecting.
Processed on your device. Files aren’t sent anywhere.
Reading a tab-separated file
Tabs are the delimiter, so commas, semicolons and quote characters inside a cell are ordinary text and need no escaping in the input. That is why database and analytics exports that were never quoted still parse correctly here.
The parser is quote-aware as well: a quoted run may contain tabs, doubled quotes collapse to one, and a newline inside quotes stays inside the cell instead of starting a new row. A UTF-8 byte-order mark at the start of the file is dropped.
- Tabs split columns; commas are plain cell text
- Quoted cells may contain tabs and line breaks
- Doubled quotes inside a quoted cell become one quote
- Rows with no content at all are skipped
Empty cells are kept, blank lines are not
A row that has tabs but empty cells is preserved, because those empty cells carry the column structure. A completely empty line is dropped, so trailing blank lines and gaps between blocks do not turn into empty rows.
No header handling on this route
There is no "first row is a header" switch here: the first row is written out as the first row, unchanged. Nothing is renamed or converted to a number. If you want keyed objects, use TSV to JSON instead.
How the CSV output is built
Every cell is written with the least quoting that keeps the row valid. A cell is quoted only if it contains a comma, a quote character, or a line break; inner quotes are doubled in the standard way. Text with accents or non-Latin scripts is written unchanged.
The output starts with a byte-order mark so spreadsheet software reads it as UTF-8, and rows are joined with CRLF line endings, which is what most CSV readers expect. Cells containing commas gain quotes; everything else stays bare.
- Quoted only if the cell contains a comma, quote or newline
- Embedded quotes are doubled, not escaped with backslashes
- CRLF line endings between rows
- Output keeps the input name with a .csv suffix
Cells that contain commas
Descriptions, addresses and prices with thousands separators are wrapped in quotes so they stay in one column. This is the main reason to run this conversion: a comma in a bare cell would otherwise be read as an extra column.
Cells that contain tabs
A tab inside a cell is preserved and the cell is quoted, so the column count stays correct. CSV readers that ignore quoted tabs may still split it, so check the importer if your data contains tabs.
When you need this direction
Typical cases: feeding a TSV export into a spreadsheet "open" dialog, uploading a table to a form that only accepts CSV, or handing a file to a colleague whose tools assume commas.
The conversion is deliberately mechanical. Row order, column order and cell text are unchanged, so the result is the same table with a different delimiter rather than a cleaned-up dataset.
- Opening a TSV export in spreadsheet software
- Upload forms that accept only CSV
- Sharing a table with people whose tools assume commas
- No restructuring, no typing, no trimming of cell text
Semicolon locales
Some spreadsheet regions expect semicolon-separated files. This page always writes commas; the JSON to CSV route is the one that exposes a Separator control with Comma, Semicolon and Tab.
Limits and honest caveats
One file may be up to 50 MiB and you may convert up to 10 files in a batch. Parsing runs in this browser tab, so a table containing personal or customer data never leaves the device — no upload step, no account.
The parser is tolerant rather than validating: a malformed file is converted as it was read. The reported row count is the practical check against the number of rows you expect.
- Up to 10 files, 50 MiB each
- Row count is reported after conversion
- Values stay text — leading zeros and large integers are untouched
- Round trip back to TSV is not byte-identical
Values stay strings
Because nothing is typed, 0042 stays 0042 and a very large integer keeps every digit. Spreadsheet software may still reinterpret such cells on import, so set that column as text if the identifier matters.