CSV viewer and encoding checker
Open any CSV, sort and search every row, and export it again — plus the encoding problems Excel would hide from you.
- SECURE
- NO UPLOADS
- NO SIGNUP
- BROWSER BASED
- FREE
- FOREVER.
Support us with a link or a share
Drop a CSV file here
or paste a table with ⌘V / Ctrl+V · nothing is uploaded
Paste CSV or table text
Comma, semicolon, tab and pipe separators are detected locally. Ordinary spaces stay inside cells.
Starting with a generic text file rather than a confirmed CSV? The TXT to CSV converter makes the source delimiter, header and file encoding explicit before it writes a complete CSV.
The format is never the problem
A CSV file is about as simple as a file format gets: rows of text, values separated by a character. Almost nothing goes wrong with the format itself. What goes wrong is everything around it — which separator was used, which character encoding the bytes are in, and what a spreadsheet decides your data means when it opens it.
This viewer shows you the table, and then shows you the four problems that actually
break CSV files in practice. Each one is reported with an example taken from your own
file, because "this file has an encoding issue" is not useful and
VästerÃ¥s → Västerås is.
What a CSV file is
| Full name | Comma-Separated Values |
|---|---|
| Extension |
.csv
|
| Format type | Plain text table, one record per line |
| MIME type |
text/csv
|
Why your file opens as a single column
Swedish, German, French and several other localized versions of Excel expect a semicolon as the separator, not a comma. The reason is arithmetic: those locales use a comma as the decimal mark, so a comma cannot also separate fields without ambiguity.
Open a comma-separated file in one of those versions of Excel and every row lands in a single cell, because Excel never found a separator it was looking for. The file is not broken. It was written for a different locale. This viewer detects which separator your file actually uses and names it.
Why å becomes Ã¥
This is the single most common CSV complaint, and it has an exact cause. The letter
å in UTF-8 is two bytes: C3 A5. Read those two bytes as
Windows-1252 instead — one byte per character — and you get à followed
by ¥. Hence Ã¥.
Excel makes that mistake unless the file begins with a byte order mark, a three-byte prefix that says "this is UTF-8". That is the entire difference between the two CSV options in Excel's Save As dialog, and it is why one of them is called "CSV UTF-8" while the other is just "CSV".
The viewer detects the mismatch and offers to repair the text, so you can confirm the file is recoverable before deciding what to do with it.
Leading zeros, and the data loss nobody announces
A postcode like 01234, a product code like 007, a phone
number beginning with a zero — all of these are text that happens to look like a
number. Open the file in Excel and it will helpfully convert them to numbers, and
the leading zero is gone. Save the file and the loss is permanent.
Nothing warns you. The cells simply contain different values than they did. This viewer marks every affected cell and counts them, so you know before you open the file somewhere that will damage it. If the destination is code rather than a spreadsheet, CSV to JSON keeps those cells as strings for the same reason, and says which column it did it to.
Line breaks inside values
A quoted CSV field is allowed to contain a line break. It is valid, common in exported comments and addresses, and it breaks any parser written by someone who assumed one row equals one line. If your file has them, the viewer says so and how many — because a file that looks fine here and falls apart in another tool is worth knowing about in advance.
A CSV viewer that loads every row
Most online CSV viewers show you a preview and then ask you to trust it. This one loads the whole file. A 50,000-row export scrolls from the first row to the last, and the row counter at the top of the table is the real number, not a cap.
When one column contains identifiers for physical labels, inspect its leading zeroes and row shape here first, then send that exact column to the bulk barcode generator for Code 128, EAN-13 or UPC-A files.
The trick is that only the rows currently on screen exist as elements on the page — roughly forty of them, replaced as you scroll, with the space above and below held open so the scrollbar stays honest about how much file is left. That is why a large file behaves like a small one, and why the tool never has to apologize for a limit.
Sorting that knows what a column contains
Click a column heading to sort it, click again to reverse it, and click a third time to put the file back in its original order. The third click matters: the order the rows arrived in is information too, and a tool that can only sort is a tool you have to reload to undo.
Before sorting, the column is examined. Numbers sort as numbers, so 9 comes before
20 and not after it. Dates sort chronologically, whether they are written
2024-03-09 or 03/09/2024 — and if any row in the column has
a day above twelve, the column is read as day-first rather than month-first, because
that is the only honest reading of it. Everything else sorts as text using your
browser's own collation, which puts item2 before item10 and
sorts å, ä and ö where the language they belong to expects them.
One rule overrides the rest. A column with leading zeros is text. A
single 01234 anywhere in the column is enough to keep it out of numeric
sorting, because the moment a postcode is treated as a number it stops being a
postcode. It would be a strange tool that warns you about Excel destroying leading
zeros and then quietly did the same thing on the way to sorting them.
Empty cells sort to the bottom in both directions, as they do in a spreadsheet, and
values that do not fit the column's type — an N/A in a column of
numbers — land just above them rather than being scattered through the results.
Equal values keep the order they had in the file.
Searching, and seeing where the match is
The search box filters rows as you type, across every column, ignoring case unless you ask it not to. The counter tells you how many rows matched and how many individual cells did, which are different numbers whenever a row matches twice — a customer whose name appears in both the name column and the email column, for example.
Matches are highlighted inside the cell rather than just implied by the row being present, so you can see immediately whether you found what you meant or a substring of something else. You can also narrow the search to a single column, which is the difference between finding every row mentioning a city and finding the rows where the city column is that city.
Reading the same bytes a different way
Character encoding is detected from the bytes, but detection cannot always be right.
A file that is genuinely Windows-1252 is often also valid UTF-8 — the byte sequences
overlap — so nothing about the file itself announces the mistake. Only a human
looking at the text can tell that ö was supposed to be
ö, or that a name has quietly lost its accent.
So the reading is a setting, not a verdict. Pick UTF-8, UTF-16 LE, UTF-16 BE or Windows-1252 and the table is decoded again from the same bytes already in memory. Nothing is re-read from disk and nothing is sent anywhere. If the accented characters snap into place, you have found the encoding the file was actually written in — and you can export it in a form that says so.
Getting the table back out
Exports follow what you see. If you sorted the table and filtered it down to the forty rows you care about, that is what leaves — the row count is printed on the button before you click it. Values are written exactly as they were read; nothing is re-typed, rounded or trimmed on the way out. There is exactly one edit any export makes to your bytes, it happens only in CSV and TSV, and the next paragraph is about it.
A value that begins with =, +, - or
@ is read as a formula by Excel, Google Sheets and LibreOffice
the second the file opens. That is not a display quirk: a cell holding
=cmd|'/c calc'!A1 is a documented way to start a program from a
spreadsheet, and a CSV you were handed can contain one. A CSV has no channel for saying "this
value is text": the format is bytes and delimiters, nothing more. So the CSV and TSV
downloads write those values with a leading apostrophe, which is the one thing a
spreadsheet reads as "keep the rest as text", and the tool tells you how many values
that was — before you download, and again on the receipt afterwards. The apostrophe
is a real character in the file. Strip it if the destination is a database or a
script rather than a spreadsheet.
The Excel (.xlsx) and JSON exports are not changed,
and that is a decision rather than an oversight. An .xlsx cell carries
its own type, so a text cell holding =1+1 is four characters and nothing
runs. A JSON value is already a string by construction. Both formats can say "this is
text" in their own words, so adding an apostrophe there would only be a character you
never typed. A plain negative number such as -5 is left alone in every
format too: a spreadsheet evaluates it to itself, so there is nothing to defuse, and
quoting it would turn a number into text and break the column's arithmetic.
CSV lets you choose the delimiter and whether to write a byte order mark. The mark is three bytes at the very start of the file that say "this is UTF-8". Without it, Excel in several European locales assumes the legacy encoding, and your å arrives as Ã¥ — the same failure described further up this page, now avoidable in the other direction.
But a BOM only fixes the encoding, and that is worth being explicit about, because
plenty of tools imply it fixes more. Excel still re-interprets a CSV when it
imports it, so 01234 still arrives as 1234 whatever the
file's encoding was. If your data has leading zeros, take the
Excel (.xlsx) export instead. A real spreadsheet file stores a type
with every cell, so a text column arrives as text and the zeros survive. Columns that
genuinely hold numbers are written as numbers, so you still get arithmetic where
arithmetic makes sense.
JSON gives you one object per row, keyed by column name, with every
value as a string — for the same reason: turning 01234 into a JSON
number is exactly the data loss this tool exists to point out. Duplicate and empty
column names get unique keys instead of silently overwriting each other.
TSV is there because a tab almost never appears inside a value,
which makes it the safest thing to paste straight into a spreadsheet.
The reverse trip has its own page. Arriving with an API response or a log export and needing a table out of it is a different problem — the nesting has to be flattened before there are any columns at all — and JSON to CSV shows you which keys it turned into which headers before writing the file.
Why local processing matters for this file type
People open CSV files that contain customer lists, payroll data, exported orders, email addresses and membership registers. It is probably the single most personal-data-dense format in ordinary office use.
This tool reads the file in your browser. Nothing is transmitted, there is no server involved, and you can confirm that yourself by opening your browser's Network tab before you drop the file — there will be no upload request, because there is nothing to upload to.
Questions
Why does my CSV open as a single column in Excel?
Swedish and German Excel expect a semicolon as the delimiter, not a comma. A comma-separated file opens as one column because Excel never splits it. This viewer detects the actual delimiter and tells you which one your file uses.
Why do I see Ã¥ instead of å?
The file is UTF-8 but was opened as Windows-1252. Excel assumes the legacy encoding unless the file starts with a byte order mark. This viewer detects it and can repair the text.
Can it open a file with 50,000 rows?
Yes. Every row is loaded and every row is searchable and sortable — only the rows currently on screen are drawn, so scrolling stays smooth. There is no preview limit and no row cap.
Will exporting to Excel destroy my leading zeros?
Not if you use the Excel (.xlsx) export. A CSV is re-interpreted on import, so Excel turns 01234 into 1234 no matter what encoding it is in. In an .xlsx each cell carries its own type, so a text column stays text.
Is my file uploaded anywhere?
No. The file is read by your browser and never transmitted. That matters here more than for most tools — CSV files routinely hold customer lists, payroll and personal data.