2013-08-26 9 views
5

次最小限の例の出力は(私のLinuxマシン上の)ファイル::グロブが非UTF8にUTF8文字列を変換するの予期せぬ副作用を持っているように見えることを示していますperlのFile :: Globはutf8 :: decodeで常にポストフィルタリングされるべきですか?

#!/usr/bin/perl 

use utf8; 

use strict; 

my $x = "påminnelser"; 
my $y = glob $x; 

print "x=",utf8::is_utf8($x),"=\n"; 
print "y=",utf8::is_utf8($y),"=\n"; 

これは間違っている原因になっています私のプログラムでの行動。 Linuxでは、File :: Globの後にutf8 :: decode()を適用して修正できるようです。これはこれを修正する正しい方法ですか?これはFile :: Globのバグですか?私の修正により、Windowsなどの他のシステムで正しい結果が得られますか?

答えて

4

ファイル名を扱う関数のエンコーディング処理は現在、perlのtodoリストにあります:Unicode in Filenamesです。問題は、一般的なオペレーティングシステム(Linuxなど)ではファイル名のエンコーディングがサポートされていないことです(現在のロケール設定を使用する以外は設計上問題があります)。

私の助言は、ASCII以外のファイル名を避けることです。

+0

参考情報をお寄せいただきありがとうございます。しかし、これは私の疑問に答えるものではありません。これは、私の回避策が正しいかどうかです。私は、ASCII以外のファイル名を持つことができないことをユーザーに任意に伝えたくありません。 –

+0

すべてのユーザーがファイル名のエンコーディングとしてutf8を使用している場合にのみお勧めします。 no_O.ISO8859-1というロケールを持つユーザーがいて、このロケールに基づいてファイル名を作成すると、機能しません。この場合は、 'Encode :: Guess'または同様のモジュールを使用して、推測することができます。 –

+0

私は参照してください。だから私は私の質問への答えは、私の提案された回避策は悪い考えであり、一部のユーザーにとっては壊れそうだということです。 +1 –

関連する問題