Mam plik znajdujący się w katalogu z duńskimi znakami na komputerze z systemem Windows XP. Używam Strawberry Perl i chciałbym przeczytać ten plik. Poniższy kod działa poprawnie:Jak odczytać plik o długiej nazwie pliku z unicode w Strawberry Perl nie używając Win32 :: Unicode :: File?
use Win32::Unicode::File;
# Some code left out....
$fname = $mw -> getOpenFile(-filetypes=>$types);
my $fh = Win32::Unicode::File->new;
$fh->open('<', $fname);
Procedura getOpenFile pochodzi od Tk. Teraz z jakiegoś powodu Win32 :: Unicode :: File ma kilka niefortunnych efektów ubocznych, z którymi nie mogę żyć (zjada moją pamięć, zobacz "Out of memory" with simple Win32::Unicode::File readline loop and Strawberry Perl). Teraz jeśli spróbuję otworzyć plik bez interfejsu Win32 :: Unicode :: File, otrzymam plik nie znaleziony. Powodem tego jest niewłaściwa interpretacja ścieżki. Próbowałem przekonwertować ścieżkę zgodnie z Perl: managing path encodings on Windows, który nie działa z jakiegoś powodu. Jak mam to rozwiązać? Próbowałem następujące:
use Encode;
# Some code left out....
$fname = $mw -> getOpenFile(-filetypes=>$types);
my $fh;
open($fh, '<', encode("utf8",$fname,Encode::FB_CROAK));
i nie działa. Jakieś pomysły?
Proszę wybaczyć mi, jeśli jestem niejasna.
poważaniem, Michael
Alternatywy: http://p3rl.org/PerlIO::fse http://p3rl.org/Path::Class::Unicode – daxim
metinks powinieneś używać UTF16 jako kodowania. Jak wygląda nazwa $ fname w debugerze? –