我需要通过 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
代替\n
after sep,但没有运气。