Why a German CSV opens as one column — and what 1.234 means
A CSV saved by a German Excel has semicolons between the fields and a comma inside the numbers, so a tool expecting commas reads each line as one long value. The fix is not a search and replace: swapping semicolons for commas without touching the numbers turns 1.234,56 into two columns and a wrong total.
What a German file usually looks like
Saved by a spreadsheet set to German (Germany), the file has a semicolon between the fields, a comma as the decimal mark and a full stop between thousands, so one thousand two hundred and thirty-four and a half is written 1.234,56. Dates are written DD.MM.YYYY: the last day of 2026 is 31.12.2026.
The separator is not a character any of the numbers contain, so nothing in the file needs quoting to survive — which is exactly why the amounts and the fields can be told apart at all.
None of this is a rule the file carries with it — there is no country written inside a CSV. It is what the program that wrote the file was set to, which is why every tool here reads the bytes and says what it found rather than trusting a flag.
The number that means two different things
Written in a German file, 1.234 is one thousand two hundred and thirty-four. Read by a program expecting the English convention it is one point two three four — a thousand times smaller, with no error and nothing to notice. That single ambiguity is why a German CSV cannot be converted by replacing characters: whether the full stop is a thousands mark or a decimal point depends on what wrote the file, not on the character.
The delimiter fixer here resolves it the only way that is safe, by the shape of the whole column. A column qualifies for conversion when nearly every value in it reads as a number under the German rules; then 1.234,56 becomes 1234.56 and a bare 1.234 becomes 1234, because in a German file that is what it means. A column of prose that happens to contain 12,5 never qualifies, so it is never touched.
The count of rewritten values is shown before you download, and the conversion can be switched off entirely — the separator is still fixed and every value is carried across exactly as written.
The other two things in the file
Older German exports are often Windows-1252 rather than UTF-8, which is why Müller arrives as Müller. The fixer decodes by what the bytes actually are and writes clean UTF-8, so the umlaut survives the trip rather than being repaired by hand afterwards.
Dates written 31.12.2026 are unambiguous — no month goes above twelve in that position and the dots are not the English separator — so nothing reads them backwards by accident. They are still text to every tool until something reads them; the SQL console turns the column into real dates with strptime and the pattern from the paragraph above.
The sample file
Rechnung;Kunde;Datum;Betrag
INV-1001;Beispiel GmbH;31.12.2026;1.234,56
INV-1002;Müller Muster AG;02.03.2026;89,50
INV-1003;Vorlage KG;05.06.2026;32,10
INV-1004;Größe Probe GmbH;12.11.2026;24.680,00
INV-1005;Musterfirma AG;20.01.2026;410,00
Obviously made-up data, small enough to read. Download it and drop it on the tool to see the fix before trying your own file.
Questions
- Why does Excel save my CSV with semicolons in Germany?
- Because the comma is already doing a job: it is the decimal mark. Excel uses the system list separator between values instead, which is a semicolon in German regional settings, and the file is correct — for Germany.
- Can I just replace every semicolon with a comma?
- Not safely. The amounts contain commas of their own, so a blind replacement puts 1.234,56 into two columns and the row gains a field. The separator and the numbers have to be handled together, which is what the fixer does.
- What will 1.234 become?
- One thousand two hundred and thirty-four, written 1234 — because that is what a full stop means in a German file. If your column mixes the two conventions, fix that column by hand in the editor rather than letting anything guess.
- Why do my umlauts show as Müller?
- The file is being read as the wrong encoding, usually a Windows-1252 export opened as UTF-8 or the reverse. Nothing is damaged: the fixer decodes it correctly and the download is clean UTF-8.
- Will 31.12.2026 be read as a date?
- Not by itself — it is text until something reads it. In the SQL console, strptime with the pattern %d.%m.%Y turns the column into real dates, and the dotted German form is never confused with the English one.
- Is my German export uploaded anywhere?
- No. The separator is detected and the numbers rewritten inside this page, on your machine; in the Network tab of your developer tools, no request carries the file.