
jens wrote:
Ich hab mir TestDaten gemacht: <verz> ./dir eins/ <verz> ./dir zwei äöüß/ <datei> ./file eins.txt <datei> ./file zwei äöüß.txt
Im mc sehe ich die Namen richtig. Mit dem ls Befehl allerdings nicht. Da sind nur Fragezeichen statt den Umlauten.
Dann sind die Umlaute vermutlich mit ISO-8859-1 kodiert, und nicht mit UTF-8. Schalte Deine locale mal auf ISO-8859-1, und probier dann ls noch mal. Alternativ: Erzeuge mal eine Datei "ohne" mc, z.B. mit touch äöu.txt Probier' dann ls, und dann mc. Solange das alles nicht zusammen passt, ist es kein Wunder, wenn Python damit nicht klar kommt.
Also hab ich nochmal ein neuen Test gemacht. Diesmal hab ich per Samba von Windows aus neue Dateien mit Umlauten gemacht. Siehe da, nun klappt es direkt! Also os.listdir() spuckt direkt unicode aus und os.stat() und os.path.* arbeiten richtig.
Samba nimmt per default an, dass Dateinamen unter Linux UTF-8-kodiert sind (Einstellung "unix charset", siehe smb.conf(5)).
Also liegt das ganze Problem wohl an meiner Linux installation :(
Genau. Du musst Dich entscheiden, welches Encoding Dateinamen auf Deinem System haben sollen, und dass dann konsequent konfigurieren. Meine Empfehlung: Dateinamen sollten UTF-8-kodiert sein. Da Deine locale schon richtig ist, musst Du nun noch Deine Terminalemulation anpassen. Wie man das macht, hängt vom konkreten Programm ab. Bei (KDEs) konsole kannst Du beispielsweise mal echo $'\033%G' ausführen: das schaltet die konsole in UTF-8-Modus. Wenn Du dann ls machst, sollten die Samba-erzeugten Dateinamen richtig angezeigt werden. Alternativ kannst Du das encoding auch über Einstellungen/Kodierung umschalten.
Nur sollte Python in dem Falle nicht irgendwie trotzdem funktionieren?
Nein, das ist technisch nicht möglich. Du hast (über die locale) Python erklärt, dass Deine Dateinamen UTF-8-kodiert sind. Es liest (mittels readdir) die Dateinamen ein, und stellt fest, dass es nicht UTF-8 sein *kann*. Was es dann aber ist, kann es nicht wissen, und fügt deshalb byte strings in das listdir-Ergebnis ein.
Kompliziert wird es, weil ich ja die Dateinamen als Webseite anzeigen lasse, mit Links. Diese Links sollten auch funktionieren ;)
Ja, an dieser Stelle hat Unix große Mängel. Langfristig die einzige Lösung ist die Verwendung nur noch von UTF-8 locales, und die durchgängige Verwendung dieses Encodings in Dateinamen, Daten usw. Ciao, Martin _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de