[Python-de] filesystemencoding

Jens Diemer python_gmane at jensdiemer.de
Don Apr 6 08:47:48 CEST 2006


Martin v. Löwis schrieb:
>> 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.

Jep, das ist es... Ich hab mal ein "sudo dpkg-reconfigure locales" 
gemacht und nur "de_DE.UTF-8" ausgewählt.

Sieht da, mit ls sehe ich nun alles korrekt. Mein TestSkript 
funktioniert auch und os.listdir() spuckt nur unicode raus...

Dennoch will meine WebApp nicht :(

In meinem kleinen TestSkript hab ich folgendes:

=======================================================================
def get_file_encoding(f):
     if hasattr(f, "encoding"):
         return f.encoding
     else:
         return "not set"

print "sys.stdin.encoding:", get_file_encoding(sys.stdin)
print "sys.stdout.encoding:", get_file_encoding(sys.stdout)
print "sys.stderr.encoding:", get_file_encoding(sys.stderr)
print "sys.getdefaultencoding():", sys.getdefaultencoding()
print "sys.getfilesystemencoding():", sys.getfilesystemencoding()
print "locale.getpreferredencoding():", locale.getpreferredencoding()
=======================================================================

Das spukt mir das aus:

"""
sys.stdin.encoding: UTF-8
sys.stdout.encoding: UTF-8
sys.stderr.encoding: None
sys.getdefaultencoding(): ascii
sys.getfilesystemencoding(): UTF-8
locale.getpreferredencoding(): UTF-8
"""

Sieht also gut aus... Nun hab ich es mal in meiner WebApp eingebaut und 
siehe da, es sind ganz andere Angaben:

"""
sys.stdin.encoding: None
sys.stdout.encoding: None
sys.stderr.encoding: None
sys.getdefaultencoding(): ascii
sys.getfilesystemencoding(): ANSI_X3.4-1968
locale.getpreferredencoding(): ANSI_X3.4-1968
"""

Vorsorglich hab ich mal apache restartet, bring aber auch nix... Wie 
kommt es, das hier völlig andere Angaben zustandekommen? Ich nehme mal 
an, das Python darüber stolpert...

Leider kann man ja nicht per sys.setdefaultencoding() ein eigenes 
einstellen, da es von site.py gelöscht wird :(

Mit einem reload kann man es allerdings doch machen:

         reload(sys)
         sys.setdefaultencoding("utf-8")

Bringt aber in meinem Falle auch nicht's :( Zwar ist 
sys.getdefaultencoding() danach wirklich auf UTF-8 umgestellt, aber 
sys.getfilesystemencoding() und locale.getpreferredencoding() bleiben 
auch den alten Werten...


Also von daher bin ich leider nicht wirklich weiter :(


-- 
Mfg.

Jens Diemer


----
CMS in pure Python CGI: http://www.pylucid.org