encoding, cp850

09/01/2008 - 21:00 von Stefan Seth | Report spam
Hallo,

ich hab ein Problem mit dem Verstàndnis der Kodierung von
Zeichenketten. Z. B. möchte ich von der Windows-Kommandozeile aus ins
Verzeichnis c:\tàst wechseln:

$eins = "à";
printf "%x %s", ord($eins), $eins;
chdir "c:/t" . $eins . "st" or print "1 geht nicht";

binmode(STDIN, ":encoding(cp850)");
$zwei = <STDIN>;
chomp $zwei;
printf "%x %s", ord($zwei), $zwei;
chdir "c:/t" . $zwei . "st" or print "2 geht nicht";

print "gleich" if $eins eq $zwei;
__END__
e4 õ
à
e4 õ
2 geht nicht
gleich


Was ist denn der Unterschied zwischen $eins und $zwei, so daß die
zweite Variante nicht funktioniert? Wieso gibt der Vergleich mit 'eq'
wahr? Und wie geht's richtig?

Gruß
Stefan
Oben sei ein Kopf.
 

Lesen sie die antworten

#1 Slaven Rezic
09/01/2008 - 23:27 | Warnen spam
Stefan Seth writes:

Hallo,

ich hab ein Problem mit dem Verstàndnis der Kodierung von
Zeichenketten. Z. B. möchte ich von der Windows-Kommandozeile aus ins
Verzeichnis c:\tàst wechseln:

$eins = "à";
printf "%x %s", ord($eins), $eins;
chdir "c:/t" . $eins . "st" or print "1 geht nicht";

binmode(STDIN, ":encoding(cp850)");
$zwei = <STDIN>;
chomp $zwei;
printf "%x %s", ord($zwei), $zwei;
chdir "c:/t" . $zwei . "st" or print "2 geht nicht";

print "gleich" if $eins eq $zwei;
__END__
e4 õ
à
e4 õ
2 geht nicht
gleich


Was ist denn der Unterschied zwischen $eins und $zwei, so daß die
zweite Variante nicht funktioniert? Wieso gibt der Vergleich mit 'eq'
wahr? Und wie geht's richtig?



Leider funktioniert Unicode und alles, was mit Dateinamen zu tun hat,
unter Perl (bis einschließlich Version 5.10.0) nicht so, wie das
restliche Unicode-System. Am Besten ist es wohl, wenn man hier so viel
wie möglich mit Bytes arbeitet. Eine Behebung des jetzigen Zustands
ist nicht vor 5.12 zu erwarten.

Gruß,
Slaven

Slaven Rezic - slaven <at> rezic <dot> de

Tk-AppMaster: a perl/Tk module launcher designed for handhelds
http://tk-appmaster.sf.net

Ähnliche fragen