Welcome toVigges Developer Community-Open, Learning,Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
438 views
in Technique[技术] by (71.8m points)

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中正常读取该路径呢?


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

终于找到解决方案了!

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

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

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


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
...