- 論壇徽章:
- 0
|
使用tk打開目錄和文件選擇窗口以便選定目錄和文件,當名稱中有中文時,程序運行遇到編碼格式的問題- #!/usr/bin/perl -w
- use strict;
- use utf8;
- use File::Find;
- use Tk;
- my $mw = MainWindow->new;
- my $dirname; # select dirname
- # contain directory items
- my $resultLbox = $mw->Listbox->pack;
- # select a directory
- my $selectDirBt = $mw->Button(-text => 'select dir',
- -command => sub {&select_dir})->pack;
- # display your select directory tree into listbox
- my $displayResultBt = $mw->Button(-text => 'display dir',
- -command => sub {&display_result})->pack;
- MainLoop;
- # opening a window for selecting directory
- sub select_dir{
- $dirname = $mw->chooseDirectory;
- }
- # putting directory tree to listbox
- sub display_result{
- my @result;
- if ($dirname){
- find(sub {push (@result, $File::Find::name)}, $dirname);
- $resultLbox->insert('end', @result);
- }
- }
復制代碼 點擊選擇目錄按鈕,選擇一個含有中文名字的路徑,然后點擊列出目錄按鈕,后臺報錯
error msg: Can't stat C:/Users/Administrator/Desktop/C語言: No such file or directory
修改程序,加入Encode模塊- #!/usr/bin/perl -w
- use strict;
- use utf8;
- use Encode;
- use File::Find;
- use Tk;
- my $mw = MainWindow->new;
- my $dirname; # select dirname
- # contain directory items
- my $resultLbox = $mw->Listbox->pack;
- # select a directory
- my $selectDirBt = $mw->Button(-text => 'select dir',
- -command => sub {&select_dir})->pack;
- # display your select directory tree into listbox
- my $displayResultBt = $mw->Button(-text => 'display dir',
- -command => sub {&display_result})->pack;
- MainLoop;
- # opening a window for selecting directory
- sub select_dir{
- $dirname = $mw->chooseDirectory;
- }
- # putting directory tree to listbox
- sub display_result{
- my @result;
- if ($dirname){
- find(sub {push (@result, $File::Find::name)}, decode('utf8', $dirname));
- $resultLbox->insert('end', @result);
- }
- }
復制代碼 依然報錯
error msg: Can't stat C:/Users/Administrator/Desktop/C錕斤拷錕斤拷: No such file or directory
應該是編碼格式的問題,在使用選擇文件的時候,遇到的情況和這個類似
希望知道解決方法的朋友可以給我一些指導和建議,上面的代碼也可以拷貝測試。
謝謝!
|
|