使用 League/CSV 导出 CSV 不会对变音符号进行编码
Exporting CSV with League/CSV doesn't encode umlauts
我正在使用 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 不正确地显示变音符号。请参阅下面我的回答。
我的问题表述不当,但我会在此处留下答案,以防其他人遇到同样的问题。该文件实际上已正确导出:如果我在文本编辑器中打开它,则变音符号已正确形成。
为了让它在 Excel(在 Mac 上)正常工作,我必须:
- 打开一个空工作表
- 数据 > 获取外部数据 > 导入文本文件...
- 从文件来源下拉列表中,select "Unicode (UTF-8)"
我正在使用 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 不正确地显示变音符号。请参阅下面我的回答。
我的问题表述不当,但我会在此处留下答案,以防其他人遇到同样的问题。该文件实际上已正确导出:如果我在文本编辑器中打开它,则变音符号已正确形成。
为了让它在 Excel(在 Mac 上)正常工作,我必须:
- 打开一个空工作表
- 数据 > 获取外部数据 > 导入文本文件...
- 从文件来源下拉列表中,select "Unicode (UTF-8)"