Корректный экспорт csv в utf-8 with BOM
У меня всё корректно Excel определяет. Использую разделитель точка с запятой и перед записью в .csv вставляю BOM:$csv = fopen('file.csv', 'w');
fprintf($csv, chr(0xEF).chr(0xBB).chr(0xBF));
...
При открытии(импорте) CSV-файла в Excele можно указывать кучу опций, в т.ч. и кодировку с разделителями и даже метод форматирования ячеек. 
В LibreOffice он по умолчанию спрашивает эти опции, в MS надо мастер импорта из текстовых файлов вызывать.