使用 League/CSV 导出 CSV 不会对 umlauts 进行编码

共1个回答,已解决, 标签: php laravel csv utf-8 byte-order-mark

我正在导出一个模型在拉拉维尔 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 文件确定, 但任何 umlauts 呈现不正确 (例如, 作为 √∂ )。我原以为设置 BOM 就能解决这个问题。有人有解决办法吗?

编辑: 问题不在于导出, 而是 Mac Excel 显示不正确。请看我下面的答案。

第1个答案(采用)

我的问题制定得很糟糕, 但我将在这里留下答案, 以防其他人遇到同样的问题。该文件实际上是正确导出的: 如果我在文本编辑器中打开它, umlaut 的形成是正确的。

要使其在 Excel (在 Mac 上) 正常工作, 我必须:

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

相关问题

mysql _ 拿给数组 ()/mysql_fetch_assoc ()/mysql_fetch_row ()/mysql_num_rows 等希望参数1是资源或结果 参考-此错误在 PHP 中意味着什么? 如何在 PHP 中分析和处理 HTML\ xml? React Laravel 5.8.33 Axios: 使用 axios.post 请求注册用户时出错; 澄清代码问题 工匠命令 “品牌: 月 Laravel 验证” 是不确定的 使用 Laravel 创建新项目会引发异常 使用 League/CSV 导出 CSV 不会对 umlauts 进行编码 UTF-8 一路通过