【问题标题】:Exporting CSV with League/CSV doesn't encode umlauts使用 League/CSV 导出 CSV 不会编码变音符号
【发布时间】:2019-08-03 00:24:06
【问题描述】:

我正在使用 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 文件 ok,但是任何变音符号都被错误地渲染(例如 √∂)。我原以为设置 BOM 会解决这个问题。有人有解决办法吗?

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

【问题讨论】:

  • 您尝试过任何编码方法吗?例如:$reader->addStreamFilter('convert.iconv.ISO-8859-15/UTF-8'); ?
  • 补充一下,元音变音不再是√∂,现在是√ɬ∂

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


【解决方案1】:

我的问题表述得很糟糕,但我会在此处留下答案,以防其他人遇到同样的问题。该文件实际上已正确导出:如果我在文本编辑器中打开它,则元音变音符号格式正确。

为了让它在 Excel 中正常工作(在 Mac 上),我必须:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-23
    • 2021-08-02
    • 2014-12-26
    • 1970-01-01
    • 2021-01-18
    • 2021-09-11
    • 2013-12-27
    相关资源
    最近更新 更多