我假设您正在使用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模块来说),因为Windows中的Unicode文件API是透明支持的。