使用League / CSV导出CSV不会编码变音符号

时间:2019-03-12 13:46:31

标签: php laravel csv utf-8 byte-order-mark

我正在使用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文件,但是所有变音符的显示方式都不正确(例如,√∂)。我本以为设置BOM可以解决此问题。有人有解决方案吗?

编辑:问题不在于导出,而是Mac Excel错误地显示了变音符号。请参阅下面的答案。

1 个答案:

答案 0 :(得分:1)

我的问题表达得不好,但是如果有人遇到同样的问题,我将在这里保留答案。实际上,该文件已正确导出:如果我在文本编辑器中将其打开,则会正确地创建变音符号。

要使其在Excel中(在Mac上)正常运行,我必须:

  1. 打开一个空的工作表
  2. 数据>获取外部数据>导入文本文件...
  3. 从“文件来源”下拉列表中,选择“ Unicode(UTF-8)”