daww1969 2018-12-18 16:13 采纳率: 0%
浏览 609

php从ANSI文件中截取数据出现中文乱码怎么解决?

php简单的文件处理程序,将一个文件夹下的所有文件遍历并存入数组,然后将每个文件(ANSI简体中文编码)逐行读取并存入另一个数组(以回车和换行为依据切割)。从第二个数组中截取需要的数据并存入新建文件中。在初始文件与转换后的新文件编码格式一致的情况下,新文件打开后中文部分出现乱码,数字和英文正常。试过所有的转码方法,如iconv、mb_convert_encoding以及在头部加charset等等都无效。请问这是为什么?怎么解决?

echo "begin...".PHP_EOL;
$i = 0;
$files = glob('目标文件路径');   //把目标文件夹下所有的文件存到一个数组里面
$size = count($files);
foreach ($files as $filename) {
    $string=file_get_contents($filename); 
    //echo iconv("GBK", "UTF-8//IGNORE",$string);
    $array=explode("\r\n",$string);    //字符串转数组(换行+回车切割)

    foreach($array as $key=>$linedata) {

        $time=substr($linedata,32,10);  //时间
        $name=substr($linedata,337,40);     //名称
        //$name=mb_convert_encoding(substr($linedata,337,40),"GBK","auto");
        /*$name=iconv("GBK","UTF-8//IGNORE",$name);
        echo $name.PHP_EOL;*/

        $sql="insert into tlog(time, ame) values ('".$time."',".name."');";
        //$sql=iconv("GBK", "UTF-8//IGNORE",$sql);
        //$sql=mb_convert_encoding($sql,"UTF-8");
        file_put_contents("test.sql",$sql.PHP_EOL,FILE_APPEND);
    }
    //加入进度显示:已转换/总长度
    $i++;
    echo ($i/$size * 100)."%".PHP_EOL;

}

转换前
图片说明

转换后
图片说明

  • 写回答

1条回答 默认 最新

  • daww1969 2019-03-12 17:35
    关注

    问题答案是截取时偏移了一个字节位,导致后续连锁错误。按位截取一定要精准!

    评论

报告相同问题?

悬赏问题

  • ¥15 LiBeAs的带隙等于0.997eV,计算阴离子的N和P
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 来真人,不要ai!matlab有关常微分方程的问题求解决,
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算
  • ¥15 java如何提取出pdf里的文字?
  • ¥100 求三轴之间相互配合画圆以及直线的算法