What each problem means, and how to fix it
A broken CSV can look fine. The worst kind doesn't fail at all: the import goes through, but every value after a stray comma lands one column to the right. Here's what the viewer looks for, and how to fix each one.
- Rows with a different number of cells
- Every row should have as many cells as the header has columns, as RFC 4180 describes. A row with one extra cell usually has a comma inside a value that isn't in quotes. A row with fewer cells was cut short, or has a line break inside a value that isn't in quotes. Either way, the values after the break land in the wrong columns.
| Column | Meant | Read |
|---|---|---|
| id | 100000000000000003 | 100000000000000003 |
| company | Blue Harbor, Inc. | Blue Harbor |
| team@blueharbor.example | ␣Inc. | |
| zip | 02110 | team@blueharbor.example |
| phone | +1 617 555 0199 | 02110 |
| plan | Growth | +1 617 555 0199 |
| phone | (blank) | Growth |
| (no column) | (blank) |
The fix belongs in the export: a value with a comma, a double quote or a line break goes in double quotes. For one or two rows, add the quotes by hand and open the file again.
- Two columns with the same name, or a column with no name
- When an import matches columns by name, it can't tell two "phone" columns apart, and a blank name matches nothing. Rename them before you map the file. A blank name at the end of the header is often a stray separator.
- A quote that never closes
- Everything from that quote to the end of the file is read as one cell, so the rows after it seem to vanish. Go to the line the viewer names and close the quote, or remove it.
- Blank lines
- An import can read a blank line as an empty row. Delete them.
- Characters that didn't decode
- The file was saved with one text encoding and read with another, so some letters come out as junk. The viewer reads files as UTF-8 first. If a file isn't valid UTF-8, it reads it again as Windows-1252, the older Windows encoding, and says so. Ask for the export again in UTF-8, or save it as UTF-8 in a text editor. If Encoding is on Detect automatically and the text still reads Café, the damage happened earlier, when someone opened and saved the file the wrong way, so reading it again won't fix it.
| Saved as | Read as | Shows as |
|---|---|---|
| Windows-1252 | UTF-8 | Caf� |
| UTF-8 | Windows-1252 | Café |
| UTF-8 | UTF-8 | Café |
- If someone opens it in Excel
- Long numbers, values that start with 0 and values that start with =, +, - or @ are exact in the CSV. They can change when someone opens the file in Excel, which may keep 15 digits of a long number and turn the rest into zeros, drop the leading 0, and read values that start with =, +, - or @ as formulas. That's why the viewer flags phone numbers that start with +. Here's how to stop Excel changing them.
What to send back to whoever sent the file
Line numbers are what make a problem fixable by someone else. For the sample, the note writes itself:
Line 4: the company name Blue Harbor, Inc. has a comma and needs quotes. The header has two columns named phone, so please rename one. Line 5 is blank.
That's one round trip instead of a failed import, a support ticket and a second export. The Excel warnings stay off the note: those values are right in the file, so they're yours to protect, not the sender's to fix.
How the viewer reads a file
- Every cell stays text. Nothing is converted, so 02110, a 20-digit ID and a date show exactly as the file has them. Sorting puts 9 before 10 but never changes a cell.
- Quotes follow RFC 4180. A value in double quotes can hold the separator and line breaks, and two double quotes stand for one. Line numbers are the file's own lines. A row with a line break inside a value takes two lines and is numbered by the line it starts on.
- The separator is guessed from the first 50 rows. The viewer tries comma, semicolon, tab and pipe (|), and keeps the one that gives the most rows the same number of cells. If it guesses wrong, pick one.
- UTF-8 first, then Windows-1252. The viewer reads a file as UTF-8. If any bytes aren't valid UTF-8, it reads the whole file as Windows-1252 instead. Set Encoding to UTF-8 and those bytes show as �, the replacement character. A UTF-8 marker (BOM) at the start is removed from the table and noted, because some software doesn't expect one.
- The header sets the column count. Without a header row, the most common cell count does.
- Big files work. Files can be up to 50 MB. The checks cover every row; the table shows the first 500 rows that match your search.
- The file stays on your computer. Your browser reads it with the File API. The options you pick go in the address bar so you can share the setup, never the file.
Questions
- Can I open a CSV file without Excel?
- Yes. This viewer opens it in your browser, and any text editor shows the raw text. Google Sheets can import it too: File > Import, then pick "Detect automatically" under Separator character. If you're checking a file before you pass it on, skip Excel: it applies its own format to each column when it opens a .csv, so what you see isn't always what's in the file.
- Is my file uploaded?
- No. Your browser reads the file and the page doesn't send it anywhere, so it never reaches Rubie.
- Can I edit the file here?
- No. The viewer only reads the file, so what you see is what's in it. Fix the problems in the system that made the export, or in a text editor, then open the file here again to check.
When the file isn't the whole story
A clean file isn't always a complete one. The viewer can tell you a row is broken. It can't tell you what the export left out, and that's the bigger gap: by Rubie's own numbers, 95% of the sources its customers migrate from can't export everything a migration needs.
If you run onboarding at a software company and that file is a new customer's export, the missing part is the job Rubie does. We move the customer's history out of the system they're leaving and into your product, without engineering time, so onboarding doesn't wait on the export. See how Migration Playbooks run a migration end to end, or, if your file is JSON, use the JSON to CSV converter.