Ich habe ein kleines Tool geschrieben das ein web-interface haben soll. Dazu lasse ich das Python-Script per Apache laufen.
Das Tool soll zunächst eine Liste mit Verzeichnissen per HTML darstellen. Das läuft soweit auch alles sehr gut. Aber sobald ein Verzeichnis ein unicode-Zeichen (z.B. "ß") im Namen hat bricht alles zusammen
Zum auflisten der Verzeichnisse nutze ich os.listdir.
Ausgabe im python-interpreter: "['testa', 'testb', 'scheiße']"
Ausgabe, wenn ich den code im CGI-script nutze: "['testa', 'testb', 'schei\udcc3\udc9fe']"
Offensichtlich verhält sich python in der CGI-Umgebung anders, als wenn ich den Code von der Shell aus ausführe.
Nach etwas Suchen habe ich diverse Funktionen gefunden die mir Codierungs-Settings ausgeben und ändern lassen:
Code: Alles auswählen
os.environ["LC_ALL"] = "de_DE.UTF-8"
print(sys.getdefaultencoding())
print(sys.getfilesystemencoding())
print(locale.getpreferredencoding())
print(locale.getdefaultlocale())
Output im Interpreter: utf-8; utf-8; UTF-8; ('de_DE', 'UTF-8')
In der CGI-Umgebung: utf-8; ascii; UTF-8; ('de_DE', 'UTF-8')
Kurz: In der CGI-Umgebung nutzt Python 3 für das FS-Encodung ASCII statt unicode.
Wie bekomme ich das Problem gelöst? Ist da überhaupt Python das Problem, oder der Server (Apache)? Oder liegt das Problem gar an einer ganz anderen Stelle?
Versionen:
Python: 3.3.2
Apache: 2.4.3
System: Basierend auf Slackware 14