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

时间:2010-05-09 00:10:54

标签: perl unicode filesystems

在Windows中有一个common problem:在将文件名传递给open()之前,应将文件名转换为本地代码页。当然,有可能使用Win32::API,但我不希望我的脚本依赖于平台。目前我必须写下这样的内容:

open IN, "<", encode("cp1251", $filename) or die $!; 

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

1 个答案:

答案 0 :(得分:5)

使用直到5.8.1才开始工作,然后Jarkko将其取出,并在最顶层的一个令人难以置信的不兼容的更改中打破了-C转换。这使得Windows成为二等公民并且直到今天都让我很烦,因为任何其他动态语言都没有这种荒谬的缺陷。也许现在是一个好时机,我们可以听到这种变化的理由变得更糟。

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