正确编码PHPexcel的CSV文件

时间:2013-05-03 11:44:23

标签: php encoding phpexcel utf-16

我有一个Json,解码它,用PHP写入CSV文件,借助PHPexcel将CSV转换为.xls

目标是正确地从JSON导出到excel文件中。 我在编码方面遇到了问题,主要是Excel for Mac 2011,它不支持UTF-8 CSV文件:link如果我在我的Mac上预览它(空格键),它看起来编码很好。麻烦就是擅长。

首先是CSV的代码:

$file_csv = fopen('files/file.csv', 'w');

然后是JSON:

$response_data = json_decode($connection->response['response'], true);
foreach ($response_data as $value)
  {
  //take the data I have 10 strings here in reality
  $text_lang = $value['lang'];
  $date = $value['date'];
  //insert into the csv
  $details = array($text_lang, $date );
  fputcsv($file_csv, $details);
};
fclose($file_csv);

现在,如果我使用excel导入此CSV,我会遇到UTF-8问题。如果我用文本编辑器转换它,例如将Textmate转换为UTF-16LE,然后将其导入Excel,一切顺利。

用PHPExcel代码创建.xls from here

$objReader = PHPExcel_IOFactory::createReader('CSV');
$objPHPExcel = $objReader->load('files/file.csv');  
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->save('files/summary.xls');

summary.xls在UTF-8上打破,打开时需要修复。


我的第一次尝试是将上面的file.csv转换为PHP中的UTF-16LE,看看是否可以使用excel。 我在iconv之前使用了fputcsv,而excel显示了中文单词......

现在我想将csv文件编码为UTF-16LE并使用PHPExcel加载它。 我使用了以下几行并没有奏效。可能是因为我用incov创建的.csv是部分(?)UTF-8和UTF-16LE。

$objReader->setInputEncoding('UTF-16LE');
$objPHPExcel = $objReader->load('file.csv');

目标是将来自JSON的数据呈现为.xls(或.xlxs)文档,而不会在Excel上编码问题。

1 个答案:

答案 0 :(得分:3)

$objReader->setInputEncoding('');

$objPHPExcel = $objReader->load('file.csv');

这对我有用。