당신이 유닉스에 있다고 가정합니다. 그렇지 않다면 현재 사용중인 OS가 무엇인지 말하십시오.
로캘이 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"을 실행하십시오. 값이 en_US.UTF-8 대신 "C"이면 로켈을 올바르게 설치할 수 없습니다.
Windows 사용자 인 경우 Windows의 유니 코드 파일 API가 투명하게 지원되므로 유니 코드 파일 이름이 항상 작동해야합니다 (적어도 os/posix 모듈의 경우).
솔루션의 문제는 이식 할 수 없습니다 것입니다. os.path.exists는 OS 로켈을 기반으로 인코딩을 투명하게 처리해야합니다. 이것에 대해 –