导入日文CSV数据表,开始使用的是 PHPExcel导入
$objReader = \PHPExcel_IOFactory::createReader('CSV')
->setDelimiter(',')
//->setInputEncoding('GBK')
->setEnclosure('"')
//->setLineEnding("\r\n")
->setSheetIndex(0);
$objPHPExcel = $objReader->load($file);
$file_datas = $objPHPExcel->getSheet()->toArray();
结果: 获取数据失败,抛出异常 "Trying to access array offset on value of type bool".
尝试着设置编码:
objReader->setInputEncoding('GBK');
$objPHPExcel = $objReader->load($file);
$file_datas = $objPHPExcel->getSheet()->toArray();
结果: 数据可以获取,但是数据内容乱码并且数据列也不正确.
文档内容编码转换,再使用 PHPExcel 读取:
$JP_file = $file.'_JP';
if(!file_exists($JP_file)) {
$content = file_get_contents($file);
$re = mb_convert_encoding($content, 'utf-8', 'JIS, eucjp-win, sjis-win,shift-jis,utf-8');
file_put_contents($JP_file,$re);
}
$file = $JP_file;
$objReader = \PHPExcel_IOFactory::createReader('CSV')
->setDelimiter(',')
//->setInputEncoding('GBK')
->setEnclosure('"')
//->setLineEnding("\r\n")
->setSheetIndex(0);
$objPHPExcel = $objReader->load($file);
$file_datas = $objPHPExcel->getSheet()->toArray();
结果: 转出编码没问题,但是数据并没有理想输出。部份列数据没有对应
文档内容编码转换,自定义解析csv内容:
$JP_file = $file.'_JP';
if(!file_exists($JP_file)) {
$content = file_get_contents($file);
$re = mb_convert_encoding($content, 'utf-8', 'JIS, eucjp-win, sjis-win,shift-jis,utf-8');
file_put_contents($JP_file,$re);
}
$file = $JP_file;
if (($handle = fopen($file, "r")) !== FALSE) {
//解析方式不稳写
while (($row_str = fgets($handle, 4096)) !== FALSE) {
$_str = trim($row_str,"\"");
$_str = str_replace('"
','',$_str);
$_str = str_replace('",,"','","","',$_str);
$_d = explode('","',trim($_str));
$file_datas[] = $_d;
}
fclose($handle);
}
if(!isset($file_datas[7])) {
throw new \Exception('文档解析异常,没有找到正常的文档标题',2200030002);
}
结果:
输出内容编码正确,数据结果也正确,但是业务代码处理并不稳定,
我们这是对亚马逊报表进行解析,也可能报表格式有变化那么这里的解析代码就会出现异常,所以还需要找稳定的解决方法。