Supongo que estás en Unix. De lo contrario, recuerde indicar en qué sistema operativo se encuentra.
Asegúrese de que su configuración regional esté configurada en UTF-8. Todos los sistemas Linux modernos hacen esto de forma predeterminada, por lo general estableciendo la variable de entorno LANG en "en_US.UTF-8" u otro idioma. Además, asegúrese de que sus nombres de archivo estén codificados en UTF-8.
Con ese conjunto, no hay necesidad de meterse con las codificaciones para acceder a los archivos en cualquier idioma, incluso en 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'
Si esto no funciona, ejecute "locale"; si los valores son "C" en lugar de en_US.UTF-8, es posible que no tenga la configuración regional instalada correctamente.
Si está en Windows, creo que los nombres de archivo Unicode siempre deberían funcionar (al menos para los módulos os/posix), ya que la API de archivos Unicode en Windows se admite de forma transparente.
El problema con su solución es que no es portátil. os.path.exists debe manejar de forma transparente la codificación en función de la configuración regional del sistema operativo. –