How to use the csv delimiter converter
- Paste your CSV data into the input area.
- Select the current delimiter (or choose Custom and type a single character).
- Choose the output delimiter you want.
- Optionally enable Quote all fields or Trim whitespace.
- Copy the converted CSV from the output area. This csv delimiter converter updates live as you change settings.
How the conversion works
The tool parses the input using a strict RFC 4180 compliant parser written in TypeScript. It reads the text character by character, tracking whether it is inside a quoted field. Inside quotes, a doubled quote ("") becomes a single quote in the data, and the delimiter or newline is treated as literal text. Outside quotes, the chosen delimiter separates fields and a newline (CRLF, LF or CR) ends the record. A quote only opens a quoted field at the start of a field, so a stray quote inside a plain value stays a literal character. Blank lines are skipped, and a UTF-8 byte order mark at the start is dropped.
After parsing into a two-dimensional array of strings, the serializer writes each row using the output delimiter. By default it quotes a field only when that field contains the output delimiter, a double quote, or a newline. When Quote all fields is checked, every field is wrapped in double quotes and any internal quotes are doubled.
For example, converting name,desc
"A, B",C from comma to tab: the parser sees two fields in the second row because the comma inside quotes is not a separator. The serializer writes name\tdesc\n"A, B"\tC because the output delimiter is a tab and the field A, B does not contain a tab, so it stays unquoted. This csv delimiter converter preserves data integrity while minimizing unnecessary quoting.
Delimiter reference table
Common delimiters and their typical use cases:
| Character | Name | Common use |
|---|---|---|
, | Comma | Standard CSV, Excel default in US/UK |
\t | Tab | TSV, spreadsheets, data interchange |
; | Semicolon | European CSV (comma is decimal separator) |
| | Pipe | Log files, database exports |
: | Colon | Legacy systems, /etc/passwd style |
Ragged rows and data quality
If rows have different field counts, the parser does not pad or truncate. It returns exactly what it found so you can see the problem. The output will have the same ragged structure. This is intentional: hiding mismatched columns can corrupt downstream imports. After conversion, open the result in a spreadsheet or run a row-count check to locate the offending lines.
Example: input a,b,c\n1,2\n3,4,5,6 parsed with comma delimiter yields three rows with 3, 2 and 4 fields respectively. Converting to tab keeps those counts. You can then filter or fix the source before loading.
Handling custom delimiters
Choose Custom from the delimiter dropdown and type exactly one character in the custom field. Multi-character delimiters are not supported and will produce an error. The custom character can be any single character except newline, carriage return or the double quote, which is the quoting character. Typical custom choices include ^, ~ or \x1F (unit separator). If you need a non-printable control character, paste it from another source into the custom field.
When to quote all fields
Enable Quote all fields when the receiving system expects every field to be quoted, or when you want a predictable format for diffing. Some older mainframe imports and certain ETL pipelines require universal quoting. The trade-off is larger file size and slightly slower parsing on the consumer side. For most modern tools (Excel, Python csv module, PostgreSQL COPY) the default minimal quoting works fine.
Worked examples
| Example | Input | Result |
|---|---|---|
| Comma to tab with quoted commas | Input CSV: name,description,price / "Widget, Blue","A small, blue widget",12.50 / "Gadget, Red","A large, red gadget",25.00; Input delimiter: ,; Output delimiter: | name description price / Widget, Blue A small, blue widget 12.50 / Gadget, Red A large, red gadget 25.00 |
| Semicolon to comma with embedded newlines | Input CSV: id;notes;status / 1;"Line 1 / Line 2";active / 2;"Single line";pending; Input delimiter: ;; Output delimiter: , | id,notes,status / 1,"Line 1 / Line 2",active / 2,Single line,pending |
| Pipe to comma, quote all | Input CSV: sku|qty|location / ABC-123|10|Warehouse A / XYZ-789|5|Warehouse B; Input delimiter: |; Output delimiter: ,; Quote all fields in output: yes | "sku","qty","location" / "ABC-123","10","Warehouse A" / "XYZ-789","5","Warehouse B" |
| Tab to pipe with ragged rows reported | Input CSV: col1 col2 col3 / a b c d / e f; Input delimiter: ; Output delimiter: | | col1|col2|col3 / a|b|c|d / e|f |
FAQ
Does the tool support RFC 4180 fully?
It handles quoted fields, doubled quotes, embedded delimiters, embedded newlines (CRLF, LF and CR) and an optional trailing newline. It does not enforce a header row; the first row is treated as data like any other.
What happens with an unclosed quote at end of file?
The parser treats the rest of the input as part of that field until it finds a closing quote or reaches the end. This matches lenient CSV readers and lets you see the problem in the output.
Can I convert from a multi-character delimiter like "::"?
No. RFC 4180 defines a single-character delimiter. For multi-character separators, use a text editor find/replace first, then run the result through this csv delimiter converter.
Why does the output sometimes have fewer quotes than the input?
The serializer uses minimal quoting by default: it only adds quotes when a field contains the output delimiter, a double quote, or a newline. This produces cleaner, smaller CSV. Enable Quote all fields to force quoting everywhere.
Is my data uploaded anywhere?
No. All parsing and conversion runs in your browser. Nothing leaves your device.
How large a file can I paste?
The tool stops at about 3 MB of input or 2 million cells and shows a clear message, so the page never freezes. For bigger files, use a streaming command line tool such as csvkit or mlr.
Does it preserve BOM (byte order mark)?
A leading byte order mark is removed before parsing, so it does not end up inside the first field.