我需要通过 UTF16-LE 中的 PHP 生成 csv 以支持 Excel(在 Windows 和 Mac OS X 上)。正如这里mb_convert_encoding所建议的,我在文件开头使用并添加了 BOM,然后是sep=;为了使其在 Excel 上正确打开。
header('Content-Type: application/csv; charset=UTF-16LE');
header('Content-Disposition: attachment; filename=export.csv');
$output = fopen('php://output', 'w');
fputs($output, mb_convert_encoding("\xEF\xBB\xBF" . "sep=;\n" . implode($labels, ";") . "\n", 'UTF-16LE', 'UTF-8'));
foreach($data as $data_line) {
fputs($output, mb_convert_encoding(implode($data_line, ";") . "\n", 'UTF-16LE', 'UTF-8'));
}
字符编码没问题,但是当我尝试在 OpenOffice 中打开它时,我得到的是:
sep=;\n无法识别 - 它不应该在第一行。我认为这不是 BOM 问题,因为当我用十六进制编辑器打开它时,我得到的是:
BOM 似乎是正确的,因为它ÿþ是 UTF16-LE BOM。我尝试用 with\r\n代替\nafter sep,但没有运气。

