请问我的PHP代码有问题,我尝试将excel文档的所有表格转换为CSV,知道该文档包含法语字符,如“é,è,àç”,执行PHP代码后,我获得了几个CSV文档,但与其他字符而不是法语如“élé,Ã.. ..”。
我使用xampp(Apache)作为Web服务器,我更改了几个参数,如“default_charset =”UTF-8,AddDefaultCharset UTF-8 ..“。
有我的代码:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta charset="utf-8">
<?php
header('content-type: text/html; charset: utf-8');
require_once 'Classes\PHPExcel\IOFactory.php';
$inFile = 'parc.xlsx';
$objReader = PHPExcel_IOFactory::createReader('Excel2007');
$objPHPExcel = $objReader->load($inFile);
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'CSV');
$index = 0;
foreach ($objPHPExcel->getWorksheetIterator() as $worksheet) {
$objPHPExcel->setActiveSheetIndex($index);
$outFile = str_replace(array("-"," "), "_", $worksheet->getTitle()) .".csv";
$objWriter->setSheetIndex($index);
$objWriter->save($outFile);
$index++;
}
?>
谢谢,
答案 0 :(得分:2)
您应该检查xlsx文件的字符编码。如果文件是在Windows上创建的,那么它可能具有Windows-1252(CP1252)字符编码。如果是这样,则需要将其转换为UTF-8。请参阅有关如何处理excel文件的字符编码的文档。以下应该是有用的:
另请参阅此相关问题:How can I output a UTF-8 CSV in PHP that Excel will read properly?
答案 1 :(得分:1)
遗憾的是,问题在于没有可靠的方法在CSV中编码Unicode字符。使用UTF-8应该适用于大多数软件,但是当您使用Microsoft Excel打开该CSV时,不工作尤为明显,Microsoft Excel仅采用默认编码(例如CP-1252)和所有非ascii字符看起来像垃圾。
现在,您可以通过在文档的开头放置Unicode字节顺序标记来正确解释您的UTF-8,其中UTF-8表示为"\xEF\xBB\xBF"
。
但是,我发现如果您再次在Excel中修改并将文件另存为CSV,则会将其删除,随后尝试打开该文件会导致垃圾。
另一种解决方案是使用utf8_decode(或CP-1252,使用其中一个多字节编码扩展/库)转换为Latin-1。但是,除了选择欧洲字符外,这将剥夺大多数Unicode字符。