How to view a CSV file
Every practical way to open a .csv — in a browser, in a spreadsheet, in a terminal, on a phone — and which of them quietly change your data on the way in.
The quickest way
Drop the file onto viewcsvonline.com. It opens immediately as a table you can sort, search and scroll, and the file is read by your own browser rather than uploaded anywhere. There is nothing to install and nothing to sign up for, which makes it the right answer whether the CSV is ten rows or ten million.
If you only read one thing: do not double-click a CSV to open it in Excel unless you are sure the data has no ZIP codes, no long ID numbers and nothing that looks like a date. Excel rewrites all three on load, and saving the file makes the damage permanent.
What a CSV file actually is
CSV stands for comma-separated values. It is plain text: one line per row, commas between the fields, and usually the column names on the first line. Opened in a text editor, a small one looks like this:
name,email,country,signed_up
Ada Lovelace,ada@example.com,United Kingdom,2026-01-04
Grace Hopper,grace@example.com,United States,2026-01-05
Two details cause most of the confusion. First, the separator is not always a comma — in countries
where the comma is the decimal mark, Excel exports semicolons instead, and tab-separated files are
common too. Second, a CSV carries no types: every value is characters, so nothing in the file says
whether 04513 is a number or a ZIP code. Whatever opens it has to guess, and a good
viewer guesses by not guessing at all.
On Windows
| Method | Good for | Watch out for |
|---|---|---|
| Browser viewer | Reading any size file safely | Nothing — it never writes to your file |
| Excel | Calculations you actually need | Reformats numbers, dates and ZIP codes on load |
| Notepad | Checking the raw text or the separator | Unreadable past a few hundred rows; struggles with big files |
| VS Code | Developers; has CSV extensions | Not a table by default |
| PowerShell | Scripting and quick filters | Steeper learning curve |
If you must use Excel, do not double-click the file. Open Excel first, then Data → From Text/CSV, and in the import preview set every column that holds an ID, a ZIP code or a phone number to Text. That is the only reliable way to stop the conversion, and it has to be done every single time.
On a Mac
Double-clicking a CSV opens Numbers, which has the same type-guessing problem as Excel and adds one of its own: it saves back in Numbers' own format unless you explicitly export. Quick Look (select the file, press Space) gives you a fast peek at small files without opening anything, but it truncates long ones and gives you no way to sort or search.
Dropping the file on a browser viewer avoids both. If you would rather keep using Finder, install
the viewer from Chrome or Edge — after that it registers as a handler for .csv, and a
double-click opens it in the viewer, offline.
On Linux
LibreOffice Calc is the usual desktop answer, and it is better behaved than Excel: the import dialog appears every time and lets you set column types before anything is parsed. For a quick look without leaving the shell, see the terminal section. A browser viewer works identically to every other platform, which matters if you switch between machines.
On a phone or tablet
Both mobile operating systems make this harder than it should be, because a .csv
attachment has no obvious default app.
- iPhone / iPad: open the viewer in Safari and tap Browse file, then Browse to reach the Files app. Full walkthrough: how to view a CSV on iPhone.
- Android: open the viewer in Chrome and tap Browse file — the picker reaches Files, Drive and mail attachments. See viewing a CSV on mobile.
On both, add the page to your home screen once and it launches like an app the next time, with no connection required.
In a terminal
Sometimes the fastest look at a file is no GUI at all:
# first few rows, columns aligned
head -20 data.csv | column -t -s,
# how many rows
wc -l data.csv
# what the columns are
head -1 data.csv | tr ',' '\n' | nl
# scroll it, with the header pinned
csvlook data.csv | less -S # needs csvkit
# query it like a database
duckdb -c "SELECT country, count(*) FROM 'data.csv' GROUP BY 1 ORDER BY 2 DESC" column -t breaks on quoted fields containing commas, so treat it as a glance rather
than a viewer. csvkit and duckdb both parse CSV properly.
Common problems, and what causes them
| What you see | Why | Fix |
|---|---|---|
| Everything in one column | The file uses semicolons or tabs, and the tool assumed commas | Use a viewer that detects the separator, or set it in the import dialog |
é instead of é | A Windows-1252 file read as UTF-8 | Use a viewer that detects the encoding from the bytes |
| Leading zeros gone | A spreadsheet decided the column was numeric | Import as Text, or use a viewer that does not convert |
1.23457E+14 | A long ID treated as a number | Same — never let it become a number |
| Dates in the wrong order | Day/month ambiguity resolved by locale | Check the raw text; prefer ISO 2026-08-25 when you control the export |
| Rows split mid-record | A quoted field contains a line break and the parser did not handle it | Use a proper CSV parser rather than splitting on newlines |
| File will not open at all | Too large for the tool | See viewing large CSV files |