Zakładam, że jesteś w systemie Unix. Jeśli nie, pamiętaj, aby powiedzieć, w którym systemie operacyjnym jesteś.
Upewnij się, że twoje ustawienia narodowe są ustawione na UTF-8. Wszystkie nowoczesne systemy Linux robią to domyślnie, zwykle ustawiając zmienną środowiskową LANG na "en_US.UTF-8" lub inny język. Upewnij się także, że twoje nazwy plików są kodowane w UTF-8.
Przy tym zestawie nie ma potrzeby wprowadzania zmian z kodowaniem, aby uzyskać dostęp do plików w dowolnym języku, nawet w Pythonie 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'
Jeśli to nie działa, uruchom "ustawienia regionalne"; jeśli wartością jest "C" zamiast en_US.UTF-8, możesz nie mieć poprawnie zainstalowanych ustawień narodowych.
Jeśli jesteś w systemie Windows, myślę, że nazwy plików w Unicode powinny zawsze działać (przynajmniej dla modułów os/posix), ponieważ interfejs API pliku Unicode w systemie Windows jest obsługiwany w sposób przezroczysty.
Problem z rozwiązania jest to, że jej nie przenośne. os.path.exists powinien jawnie obsługiwać kodowanie w zależności od ustawień regionalnych systemu operacyjnego. –