- 締切済み
【Perl/Tk】Photo メソッド に渡すファイル名に2バイト文字コードを指定するには?
Windows-XP上で、ActivePerl This is perl, v5.8.6 built for MSWin32-x86-multi-thread を使用しています。 次のようなPerl/Tk スクリプトで、例えば、デスクトップ上にあるJPG画像ファイルを キャンバスに表示させようとしますが、2バイト文字コードを含むファイル名やパス名だとエラーが出て上手く行きません。 use Tk; use Tk::JPEG; my $fn = $ARGV[0]; my $mw = MainWindow->new; my $cv = $mw->Canvas()->pack(); if(-e $fn){ my $ph = $mw->Photo(-format=>'jpeg',-file=>$fn); $cv->createImage(64,64,-image=>$ph); } MainLoop; ------------------------------------------------- エラー例: Cannot open 'C:\Documents and Settings\guest\テつデテつステつクテつトテつッテつプ\aaa.jpg' in mode 'r' at C:\Perl\site\lib/Tk/Image.pm line 21. 2バイト文字コードを含まないファイル名(例:C:\aaa.jpg)などを指定した場合は、 無事にキャンバスに画像が表示されています。 また、ファイル名に2バイト文字コードが含まれる場合でも、 ifの判定文でファイル存在確認が機能していますので、 Photoメソッド側の問題と思われるのですが、 他に、このファイル名をutf8やeucjpへencode/decodeしてみるなど色々なパターンで試してみたのですが、 どうやってもエラーになってしまいます。 Photoメソッドには、そもそも2バイト文字コードを含むファイル名の利用は出来ない仕様でしょうか。 その他、よい回避方法などがありましたら、お教えください。 よろしくお願い致します。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- _--_1l1_1_
- ベストアンサー率67% (102/152)
お礼
ご回答ありがとうございました。 頂いたスクリプトは、2バイト文字コードを含まないような ファイル( $tmp_file )に一時コピーする方法ということですね。 とりあえず、この方法で凌いでみます。 ただ、向学のため、あくまでも2バイトの文字コードが入った名前 のまま扱う方法が分かれば、それもありがたいです。