我想生成并保存带有“Windows-1252”编码的 CSV 文件。
我的基本代码:
$filename = 'path/to/file.csv';
$file = fopen($filename, 'w');
$datas[] = [
"data 1",
"data 2",
"data 3",
// ...
];
foreach ($datas as $data) {
fputcsv($file, $data, ';');
}
fclose($file);
我尝试添加一些标题:
$options = [
'http'=> [
'header'=>
"Content-Encoding: Windows-1252\r\n" .
"Content-Type: text/csv; charset=Windows-1252\r\n"
]
];
$context = stream_context_create($options);
$file = fopen($tmpFile, 'w', false, $context);
并在调用 fputcsv() 之前转换每一行:
foreach ($datas as $key => $data) {
foreach ($data as $line) {
// I tried this :
$datas[$key] = iconv('UTF-8', 'Windows-1252', $line);
// and this :
$datas[$key] = mb_convert_encoding($line, 'Windows-1252');
}
fputcsv($file, $datas, ';');
}
但没有成功:
$ file --mime-encoding *
file.csv: utf-8
我还应该做什么?
非常感谢。
我终于找到了一个解决方案,在“Windows-1252”中使用“mb_convert_encoding()”后,放弃“fputcsv()”并将其替换为我的行的“fwrite()”。
它不是那么漂亮,但它有效:)