A CSV file is about as simple as a data format gets. It is plain text, one line per row, with values separated by commas:
name,quantity,priceWidget,12,4.50
That is the whole idea, and it is why CSV outlived every proprietary format aimed at replacing it. Every program can read it, it is tiny, it opens in any text editor, and you can see exactly what is in it.
It is also the format most likely to damage your data without telling you, and the reasons are worth knowing before the next time you open one.
This catches people constantly, and it is a language problem rather than a software bug.
In German, French, Spanish, Portuguese and many other locales, the comma is the decimal separator — 4,50 means four and a half. A comma cannot then also separate fields, so spreadsheet software in those locales writes and expects semicolons instead:
name;quantity;priceWidget;12;4,50
Both files are called CSV. Open the semicolon version in a comma-expecting program and every row collapses into a single column. Open the comma version in a semicolon-expecting one and the same thing happens in reverse.
There is no marker inside the file saying which it is. The only reliable fix is to import rather than double-click, so you can state the delimiter yourself.
What happens when a value contains a comma? It gets wrapped in double quotes:
"Smith, John",12,4.50
And when a value contains a quote mark, the quote is doubled to escape it. A field can even contain a line break, as long as it is quoted — which is why you cannot reliably count rows by counting lines in a CSV.
Every proper CSV tool handles this. Hand-built files — anything assembled by joining strings with commas — usually do not, and the breakage appears only when someone’s name or address happens to contain a comma.
This is the most damaging gap in the format, and it has no good answer.
A CSV file contains no declaration of its character encoding. Unlike HTML or XML, there is nowhere to say “this is UTF-8”. The program opening it has to guess.
Excel on Windows traditionally guesses the system’s local codepage rather than UTF-8. So a CSV containing Chinese, Japanese or Korean text — or accented European characters — opens as unreadable symbols, even though the file is perfectly correct.
Two practical responses:
This is the part that costs people real work, because it is silent and it happens before you have done anything.
A CSV has no types — every value is text. The spreadsheet guesses what each one means, and its guesses are confidently wrong in several recurring ways:
01234 becomes 1234. Phone numbers, account numbers, product codes and national ID numbers all suffer this.1.23457E+15, and the original digits are gone, not hidden.3-10 becomes 3 October. This is the famous problem that forced geneticists to rename genes whose symbols kept being converted into dates.The critical detail: if you then save the file, the damage is written back. The original values are not recoverable from the saved copy.
Two habits prevent all of it. Keep an untouched copy of any CSV you receive. And when the content includes codes, identifiers or anything with leading zeros, use the import route and mark those columns as text before the data lands.
And what it cannot do: multiple sheets, formulas, formatting, cell types, merged cells, charts, or anything nested. Those are the reasons the spreadsheet formats exist alongside it.