Thread if(-e $file) und Umlaute.. (22 answers)
Opened by GoodFella at 2007-01-16 17:12

GoodFella
 2007-01-17 06:23
#73273 #73273
User since
2007-01-09
192 Artikel
BenutzerIn
[default_avatar]
[quote=ptk,16.01.2007, 20:34]Es ist sehr wahrscheinlich, dass getOpenFile Probleme mit Umlauten hat. Ich habe schon ein ähnliches getOpenFile-Problem beheben müssen.

Wahrscheinlich funktioniert es, wenn du den Dateinamen wieder im System-Encoding zurückwandelst. Also:
Code: (dl )
Encode::encode("iso-8859-1", $dateiname)
oder ein Windows-Charset, je nachdem, was du benutzt.[/quote]
Hab jetzt ein paar Tests gemacht:
Zum einen lässt sich das Problem bei mir reproduzieren:
Perl v5.8.8 build 819
Tk 804.027-r6

Zum anderen habe ich encoding ausprobiert. War natürlich neugierig, welchen Unterschied der anders kodierte String aufweist:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
@types =( ['All files',         '*'],
          ['CSV files',      '.csv'],
          ['Excel files',    '.xls'] );
$value = $parent->getOpenFile( -filetypes => \@types, -initialdir => '.' );
print ord($_).':' for(split(//,$value));
print "\n";
$value = encode("iso-8859-1", $value);
print ord($_).':' for(split(//,$value));
print "\n";


Nun, es gibt keinen und der Fehler lässt sich so auch nicht beheben... vielleicht liegt es an der Art des encodings? Woher weiss ich, welches encoding -e file erwartet und welches mir getOpenFile zurückgibt?

Achja, Datei kurz öffnen und schliessen geht fehlerlos, prüft zwar nicht nur auf Existenz, aber wäre ein Workaround. Fragt sich nur, warum -e file anders funktioniert als open.

Die Testdatei heisst übrigens "hälölüßer_test.xls"


..Das alles deutet übrigens daraufhin, dass nur -e file Probleme mit Umlauten hat, getOpenFile jedoch korrekt arbeitet (bis auf dass es in Windows-Pfadangaben Slashes statt Backslashes zurückgibt und Button-1-Events an das darunterliegende Widget weiterleitet)

[edit]
Code: (dl )
1
2
3
4
5
C:\Xitami\cgi-bin\mailsmore\PostEnhance>perl -e "if (-e 'hälölüßer_test.xls') {
print qq(existiert\n) }"
existiert

C:\Xitami\cgi-bin\mailsmore\PostEnhance>


..Bei Benutzung von perl -e in cmd funktioniert es. Merkwürdig.\n\n

<!--EDIT|GoodFella|1169008502-->

View full thread if(-e $file) und Umlaute..