#php #laravel #csv #utf-8 #byte-order-mark
#php #laravel #csv #utf-8 #знак порядка байтов
Вопрос:
Я экспортирую модель в 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. вы пробовали какой-либо из методов кодирования? пример:
$reader->addStreamFilter('convert.iconv.ISO-8859-15/UTF-8');
?2. Добавим, что умляута больше нет
ö
, он есть сейчас√ɬ∂
.
Ответ №1:
Мой вопрос был плохо сформулирован, но я оставлю ответ здесь на случай, если у кого-то еще возникнет такая же проблема. Файл на самом деле экспортировался правильно: если я открыл его в текстовом редакторе, умляуты были правильно сформированы.
Чтобы заставить его правильно работать в Excel (на Mac), мне пришлось:
- Откройте пустой лист
- Данные> Получить внешние данные > Импортировать текстовый файл…
- В раскрывающемся списке Источник файла выберите «Unicode (UTF-8)»