- 论坛徽章:
- 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
应该是编码格式的问题,在使用选择文件的时候,遇到的情况和这个类似
希望知道解决方法的朋友可以给我一些指导和建议,上面的代码也可以拷贝测试。
谢谢!
|
|