• 1
  • 新人请关照

php中关于含Unicode编码字符路径文件读取失败问题

最近在实现一个读取视频文件的需求,使用的语言是php。由于某些文件比较大,所以使用了splFileObject这个类。读取一些纯英文的路径没问题,含中文的路径转码为gb2312也没问题,但是在读取某些整体路径含有Unicode字符的文件名,就会报错并无法读取(Unknown Error)。路径类似于下面:

//文件绝对路径
$filename = "E:/test/视频/Video 안녕하세요.mkv";
//创建文件对象,报错
$fileObj = new splFileObject($filename, 'r');

刚开始以为是库的问题,后来接连使用了fopen、file_get_contents,都是一样无法读取。想使用exec()调用ffmpeg生成该视频的缩略图,也无法读取这个文件的路径。但是直接在命令行里输入,又可以执行。

目前已确定php的编码设置成了utf8,mbstring扩展正常运行。要怎么才能在splFileObject和exec中正常读取该路径呢?

阅读 358
评论
    2 个回答
    • 1
    • 新人请关照

    终于找到解决方案了!

    PHP 7.1开始,在win10下会默认将读文件等等与系统编码的相关操作,全部以UTF8编码执行。所以只需要将PHP版本升至7.1即可解决。

    期间还试过另一种方法:将win10的Unicode语言支持打开,相当于直接改变系统编码;不过这个功能只有少部分版本的系统支持,通用性不高,后续没有深究。

    最后总结下解决方案,一句话:升至PHP 7.1!

      我在 Mac OSX 和 CentOS 上都试了,不会出现读取不了的现象,我怀疑是不是你的 php 文件的编码和操作系统的编码不一致导致的(也就是 Video 안녕하세요.mkv 这个文件名)

        撰写回答

        登录后参与交流、获取后续更新提醒

        相似问题
        推荐文章