• php解析文档(日语)编码问题


    导入日文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);
        }
        
        结果: 
        输出内容编码正确,数据结果也正确,但是业务代码处理并不稳定,
        我们这是对亚马逊报表进行解析,也可能报表格式有变化那么这里的解析代码就会出现异常,所以还需要找稳定的解决方法。

  • 相关阅读:
    【Unity3D日常开发】Unity3D工具之UnityForSVN
    排查 docker flow proxy 的 503 问题
    #()的用法【FPGA】
    大数据技术之SparkCore
    商场应急管理系统:SpringBoot技术构建
    Java数据结构:前缀、中缀、后缀表达式与逆波兰计算器的实现
    stata手动绘制logistic回归预测模型校准曲线(Calibration curve)校准曲线(1)
    vue-router配置
    点云预处理(点云滤波)学习记录
    matlab中基础
  • 原文地址:https://blog.csdn.net/pengchengxue110/article/details/125426642