Я предполагаю, что вы в Unix. Если нет, не забудьте указать, в какой ОС вы находитесь.
Убедитесь, что ваш языковой стандарт установлен на UTF-8. Все современные Linux-системы делают это по умолчанию, обычно устанавливая переменную среды LANG на «en_US.UTF-8» или на другой язык. Кроме того, убедитесь, что ваши имена файлов закодированы в UTF-8.
С этим набором нет необходимости связываться с кодировками для доступа к файлам на любом языке, даже в 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'
Если это не сработает, запустите «locale»; если значения «C» вместо en_US.UTF-8, возможно, у вас не установлен языковой стандарт.
Если вы работаете в Windows, я думаю, что имена файлов Unicode должны всегда работать (по крайней мере, для модулей os/posix), так как API файлов Unicode в Windows поддерживается прозрачно.
Проблемы с вашим решением является то, что его не портативным. os.path.exists должны прозрачно обрабатывать кодировку на основе локали ОС. –