Как известно, CSV означает «Comma Separated Values», т.е. «значения, разделённые запятыми». Но не всегда в CSV-файле значения разделены именно запятыми: скорее всего, если вы сделаете экспорт данных из Microsoft Excel в CSV, то получите файл с разделителями в виде «;». В чём же дело?
Для США разделителем целой и дробной части в числах является точка, а разделителем элементов списка — запятая:
"Lisa Simpson",8,156.05 ← 3 элемента, всё понятно
Но в России и Украине (и, думаю, не только в этих странах) запятая не может быть использована для разделения элементов списка, т.к. она уже используется для разделения целой и дробной части числа:
"Иван Петров",17,99,25 ← путаница! сколько элементов?
"Иван Петров";17;99,25 ← порядок: всё таки 3 элемента
Поэтому Microsoft Excel генерирует файл согласно региональных настроек:
Если поставить настройки как в США — будет «правильный» CSV-файл.
Но несмотря на то, что определённая логика в действиях программы есть, это всё же не соответствует стандарту — RFC 4180, и это неправильно — так же неправильно, как при генерации HTML-файла заменять в тэгах <TABLE> на <ТАБЛИЦА>, если установлена русская локаль. 🙂