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