Ich nehme an, Sie sind in Unix. Wenn nicht, denken Sie bitte daran, in welchem Betriebssystem Sie sich befinden.
Vergewissern Sie sich, dass Ihr Gebietsschema auf UTF-8 eingestellt ist. Alle modernen Linux-Systeme tun dies standardmäßig, indem sie normalerweise die Umgebungsvariable LANG auf "en_US.UTF-8" oder eine andere Sprache setzen. Stellen Sie außerdem sicher, dass Ihre Dateinamen in UTF-8 codiert sind.
Mit diesem Set gibt es keine Notwendigkeit, mit Codierungen zu stören, um auf Dateien in jeder Sprache zuzugreifen, sogar in Python 2.x.
[~/test] echo $LANG
en_US.UTF-8
[~/test] echo testing > 漢字
[~/test] python2.6
Python 2.6.2 (release26-maint, Apr 19 2009, 01:56:41)
[GCC 4.3.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> os.stat("漢字")
posix.stat_result(st_mode=33188, st_ino=548583333L, st_dev=2049L, st_nlink=1, st_uid=1000, st_gid=1000, st_size=8L, st_atime=1263634240, st_mtime=1263634230, st_ctime=1263634230)
>>> os.stat(u"漢字")
posix.stat_result(st_mode=33188, st_ino=548583333L, st_dev=2049L, st_nlink=1, st_uid=1000, st_gid=1000, st_size=8L, st_atime=1263634240, st_mtime=1263634230, st_ctime=1263634230)
>>> open("漢字").read()
'testing\n'
>>> open(u"漢字").read()
'testing\n'
Wenn dies nicht funktioniert, führen Sie "locale"; Wenn die Werte "C" anstelle von "en_US.UTF-8" lauten, ist das Gebietsschema möglicherweise nicht korrekt installiert.
Wenn Sie in Windows sind, sollten Unicode-Dateinamen immer funktionieren (zumindest für die os/posix-Module), da die Unicode-Datei-API in Windows transparent unterstützt wird.
Das Problem mit Ihrer Lösung, dass es nicht tragbar ist. os.path.exists sollte die Codierung basierend auf dem Gebietsschema des Betriebssystems transparent behandeln. –