使用League/CSV导出CSV文件时,不能正确编码umlauts。

5

我正在使用League/CSV包在Laravel 5.7中导出模型:

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文件,但任何umlauts都会呈现不正确(例如作为√∂)。我原以为设置BOM会解决这个问题。有人有解决办法吗?
编辑:问题不是导出,而是Mac Excel错误显示umlaut。请参见下面的答案。

你尝试过任何编码方法吗?例如:$reader->addStreamFilter('convert.iconv.ISO-8859-15/UTF-8'); - MoxGeek
除此之外,umlaut不再是√∂,而是现在是√ɬ∂ - GluePear
1个回答

1
我的问题表述得不太好,但我会把答案留在这里,以防其他人有同样的问题。事实上,文件已经被正确导出:如果我在文本编辑器中打开它,那么umlaut就会被正确形成。
要在Excel(Mac版)中使其正常工作,我需要:
1. 打开一个空工作表 2. 数据 > 获取外部数据 > 导入文本文件... 3. 从文件源下拉菜单中选择“Unicode(UTF-8)”

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接