将文件I/O API与unicode文件名一起使用的通用方法是什么?

dma*_*a_k 3 filesystems unicode perl

在Windows中存在一个常见问题:文件名应在传递到之前转换为本地代码页open().当然,有可能使用Win32::API它,但我不希望我的脚本依赖于平台.目前我必须写一些类似的东西:

open IN, "<", encode("cp1251", $filename) or die $!; 
Run Code Online (Sandbox Code Playgroud)

但有没有图书馆,隐藏这些细节?我认为可以自动检测本地代码页,所以我只想传递unicode文件名并忘记细节.为什么它仍然不在盒子里?

dax*_*xim 5

过去只能工作到5.8.1,然后Jarkko把它取出来,并-C在最顶层的一个无法进行的不相容的改变中打破了转换.这使得Windows成为二等公民并且直到今天都让我很烦,因为任何其他动态语言都没有这种荒谬的缺陷.或许现在是一个好时机,我们可以听到这种变化的理由变得更糟.

无论如何,你想要PerlIO::fse,但它不是一个完美的解决方案,因为你很快就会发现自己.