Cesty s mezerami a s diakritikou
Pavel Šmerk
xsmerk na informatics.muni.cz
Úterý Září 9 14:23:02 MEST 2003
Daniel Zeman wrote:
> Přátelé, neznáte někdo řešení?
> Ve Windows (Active State) mi nefunguje open(FH, $cesta), jestliže $cesta
> obsahuje mezery - např. "C:/Documents and Settings/Dan/Dokumenty/...". Perl
> si zřejmě myslí, že za mezerou už je další cesta nebo co. Zkoušel jsem mu to
> poslat ještě obalené uvozovkami, ale nepomohlo to. Podobně nefunguje ani
> glob.
>
> Taky mám problémy, když cesta obsahuje diakritiku, tam by mohlo jít o
> rozdíly mezi znakovými sadami OEM (DOS 852) a ANSI (Windows 1250), ale když
> jsem cestu nechal nejdřív překódovat, taky jsem se nedočkal úspěchu.
>
> Obojí se sice dá obejít nějakou systémovou substitucí
> subst X: "C:\Documents and Settings", ale je to jen obchvat, ne řešení, a
> skript pak není přenositelný.
No nevim, jestli i v tom Perlu nedelate nejake podivnosti. Mam build 630
na NT4.0 a funguje mi to skvele. Zkuste Win32::GetShortPathName.
Pochopitelne na kodovani zalezi, je pravda, ze se windows chovaji trosku
podivne:
C:\_devel\Perl>echo ššš > "L:\\Documents and Settings\\ššš"
C:\_devel\Perl>type "L:\\Documents and Settings\\ššš"
ššš
C:\_devel\Perl>type a.pl
use Win32;
my $a = "L:\\Documents and Settings\\ÜÜÜ";
open(FH, $a) or die;
print while (<FH>);
open(FH, Win32::GetShortPathName($a)) or die;
print while (<FH>);
C:\_devel\Perl>perl a.pl
ššš
ššš
Prvni radek vytvori soubor ššš, kdy nazev souboru je kodovan v CP1250, s
obsahem ššš, ktery je v kodovani CP852. Cili mackam tu samou klavesu v
tomtez prikazu, to stejne se mi i zobrazi, ale je to interpretovano
ruzne. ;-) a.pl je v CP1250 (proto se pri type a.pl ššš zobrazi jako
paznaky, protoze se zobrazuje v CP852), tedy ve stejnem, jako jsou nazvy
souboru a vse funguje, jak ma.
P.
P.S. Doufam, ze ma mozilla zvladne odeslat korektni kodovani ;-)
Další informace o konferenci Perl