Экспорт CSV с помощью League / CSV не кодирует умляуты - PullRequest
5 голосов
/ 12 марта 2019

Я экспортирую модель в Laravel 5.7, используя пакет League / CSV :

public function export(Request $request)
{
    $people = Person::all();
    $location = 'export.csv';
    $csv = Writer::createFromPath($location, 'w');
    $csv->setOutputBOM(Writer::BOM_UTF8);
    $csv->setDelimiter(';');
    foreach ($people as $person) {
        $csv->insertOne($this->serializePerson($person));
    }
    return response($location);
}

protected function serializePerson($person)
{
    return [
        $person->name,
        $person->age,
    ];
}

Это создает файл export.csv нормально, но все умлауты отображаются неправильно (например, как √∂). Я бы подумал, что установка спецификации решит эту проблему. У кого-нибудь есть решение?

РЕДАКТИРОВАТЬ: проблема была не в экспорте, а в Mac Excel неправильно отображал умлаут. Смотрите мой ответ ниже.

1 Ответ

1 голос
/ 02 апреля 2019

Мой вопрос был плохо сформулирован, но я оставлю здесь ответ на случай, если у кого-то возникнет такая же проблема.Файл на самом деле был правильно экспортирован: если я открыл его в текстовом редакторе, умлаут был сформирован правильно.

Для правильной работы в Excel (на Mac) мне пришлось:

  1. Открыть пустой лист
  2. Данные> Получить внешние данные> Импортировать текстовый файл...
  3. В раскрывающемся списке «Источник файла» выберите «Юникод (UTF-8)»
...