2010-05-09 58 views
3

在Windows中有一個common problem:文件名應該轉換爲本地代碼頁,然後傳遞到open()。當然,有可能爲此使用Win32::API,但我不希望我的腳本依賴於平臺。目前我不得不寫下類似的東西:使用文件I/O API和unicode文件名的通用方法是什麼?

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

但是有沒有任何庫,隱藏這些細節?我認爲本地代碼頁可以自動檢測,所以我只想傳遞unicode文件名而忘記了細節。爲什麼它仍然不在框中?

+0

找到相對的帖子:http://stackoverflow.com/questions/1721807/how-do-i-create-then-use-long-windows-paths-from-perl – 2010-05-09 00:11:51

回答

5

使用只是工作,直到5.8.1,然後Jarkko把它拿出來,並打破-C開關在頂部的恩惠不兼容的變化。這使得Windows成爲二等公民,直到今天都讓我感到困擾,因爲任何其他動態語言都沒有這種荒謬的缺陷。也許現在是我們能夠聽到爲更糟糕的變化辯護的好時機。

無論如何,你想PerlIO::fse,但它不是一個完美的解決方案,因爲你很快就會發現你自己。

+0

很好的答案,非常感謝。也許你可以鏈接到'-C'(啓用給定的Unicode功能)切換討論?什麼是打破兼容性的原因? – 2010-05-09 14:38:18

+0

http://search.cpan.org/~jhi/perl-5.8.0/pod/perlrun.pod#-C – daxim 2010-05-10 11:41:14

+0

我已經明白了你的觀點:'-C'的行爲已經發生了巨大的變化,現在呢不能控制寬字符的API設置,所以它不能再作爲一個問題的解決方案了(我已經找到了當前選項的完整列表http://perldoc.perl.org/perlrun.html#*-C- [_number /列表_] *)。您是否碰巧知道有關'-C -C'開關新政策的任何討論主題(比如批評者)? – 2010-05-10 17:57:36

相關問題