Правильное кодирование CSV-файлов для PHPexcel
У меня есть Json, расшифруйте его, запишите его в файл CSV с PHP, конвертируйте CSV в.xls с помощью PHPexcel
Цель состоит в том, чтобы правильно экспортировать из JSON в файл Excel. У меня проблемы с кодировкой и, в основном, с Excel для Mac 2011, который не поддерживает файлы CSV UTF-8: ссылка Если я предварительно просматриваю его (пробел) на моем 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);
Теперь, если я импортирую этот CSV с Excel, у меня будут проблемы с UTF-8. Если я преобразую его в текстовом редакторе, например Textmate, в UTF-16LE, а затем импортирую в Excel, все будет гладко.
И код PHPExcel для создания.xls отсюда:
$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
в UTF-16LE в PHP, чтобы увидеть, будет ли это хорошо с Excel. я использовал iconv
до fputcsv
и Excel показал китайские слова...
Теперь я хочу закодировать CSV-файл в UTF-16LE и загрузить его с помощью PHPExcel. Я использовал следующие строки и не работал. Вероятно, потому что.csv, который я создал с incov
был частично (?) UTF-8 и UTF-16LE.
$objReader->setInputEncoding('UTF-16LE');
$objPHPExcel = $objReader->load('file.csv');
Цель состоит в том, чтобы преобразовать данные из JSON в документ.xls (или.xlxs) без проблем кодирования в Excel.
1 ответ
$objReader->setInputEncoding('');
$objPHPExcel = $objReader->load('file.csv');
это хорошо сработало для меня.