Корректный экспорт csv в utf-8 with BOM

Нужно экспортировать данные из БД, чтобы открыть в excel.
Создаю csv где separator - знак \t.
Кодировка в базе utf-8, в php тоже utf-8, при экспорте использую такие заголовки:
header("Content-Type:   application/vnd.ms-excel; charset=utf-8");
header("Content-Disposition: attachment; filename=".$dt.".xls");
header("Pragma: no-cache");


Английские буквы нормально, русские excel не видит. Если открыть csv файл локально и сохранить with BOM - всё работает.

Если добавить BOM перед выводом контента - excel понимает русские буквы, но не видит сепаратора "\t" - т.е. по столбцам не разбивается, все столбцы сливаются в каждой строке.

Пробовал другие сепараторы - их excel не понимает по умолчанию.

Как быть? как отправить csv, чтобы excel открыл корректно?
  • Вопрос задан
  • 13153 просмотра
Пригласить эксперта
Ответы на вопрос 2
glukkkk
@glukkkk
У меня всё корректно Excel определяет. Использую разделитель точка с запятой и перед записью в .csv вставляю BOM:

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

Войдите, чтобы написать ответ

Похожие вопросы