KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
I have an encoding problem with Perl and Windows. On a Windows 7 running Perl (strawberry 5.16) and a simple TK GUI I need to open files and/or access directories with non-english characters in their name/path. For opening files I've come out with this solution which seems to work fine: #!/usr/bin/perl -w use strict; use warnings; use Win32::Unicode::File; use Encode; use Tk; my $mw = Tk::MainWindow->new; my $tissue_but = $mw->Button( -text => 'Open file', -command => [ \&select_unicode_file ], ); $tissue_but->grid( -row => 3, -column => 1 ); Tk::MainLoop(); sub select_unicode_file{ my $types = [ ['Txt', '.txt'], ['All Files', '*'],]; my $input_file= $mw->getOpenFile(-filetypes => $types); my $fh = Win32::Unicode::File->new; if ($fh->open('<', $input_file)){ while (my $line = $fh->readline()){ print "\n$line\n"; } close $fh; } else{ print "Couldn't open file: $!\n"; } } This correctly opens files such as Поиск/Поиск.txt What I CANNOT do is to simply get a directory path and than process it. I think I should use use Win32::Unicode::Dir but I really can't understand the documentation. It should be something like this: #!/usr/bin/perl -w use strict; use warnings; use Win32::Unicode::Dir; use Encode; use Tk; my $mw = Tk::MainWindow->new; my $tissue_but = $mw->Button( -text => 'Open file', -command => [ \&select_unicode_directory ], ); $tissue_but->grid( -row => 3, -column => 1 ); Tk::MainLoop(); sub select_unicode_directory{ my $dir = $mw->chooseDirectory( ); my $wdir = Win32::Unicode::Dir->new; my $dir = $wdir->open($dir) || die $wdir->error; my $dir_complete = "$dir/a.txt"; open (MYFILE, $dir_complete ); while (<MYFILE>) { chomp; print "$_\n"; } close (MYFILE); }
Tags (comma-separated)
Save Edits
Cancel