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

发布于 2022-09-12 04:13:25 字数 481 浏览 16 评论 0

最近在实现一个读取视频文件的需求,使用的语言是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中正常读取该路径呢?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

早乙女 2022-09-19 04:13:25

终于找到解决方案了!

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

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

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

忘你却要生生世世 2022-09-19 04:13:25

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文