2010-06-28 3 views
4

파이썬 2.6.5는 유니 코드를 지원한다고 말합니까? 어떻게 listdir()은 IDLE에 없지만, Python 3.1.2는 IDLE에 유니 코드를 표시합니까?파이썬 2.6.5는 유니 코드를 지원합니까? 어떻게 listdir()은 파이썬 3.1.2가 유니 코드를 보여주지 않는가?

for dirname, dirnames, filenames in os.walk('c:\path\somewhere'): 
    for subdirname in dirnames: 
     print (os.path.join(dirname, subdirname)) 
    for filename in filenames: 
     print (os.path.join(dirname, filename)) 

업데이트 : 유니 코드가없는 경로에서 파일 이름에 ...

답변

5

다음 코드는 동일한 동작이다 (이것은 윈도우 7에서 테스트) 3. 2에서 변경 유니 코드 문자열에 대한 구문은 다음과 같은 유니 코드 문자열 지정하십시오 : 당신은 파이썬 3 (의 구문을 원하는 경우

u'c:\\path\\somewhere' 

을의 트링 리터럴은 b 접두사가 제공되지 않는 한) 기본 유니 코드가있는 파일의 상단에

from __future__ import unicode_literals 

를 사용합니다.

+6

참으로. 요점은 파이썬 2에서 유니 코드 문자열을 전달하여 특별히 요구할 경우에만'listdir()'과 관련 함수에서 유니 코드 경로명을 얻는다는 것입니다.'os.listdir ('.')'는 'os.listdir (u '.')'의 결과. – bobince

+0

흥미 롭군요. 그러면 "\ u6c34 ..."가 표시 될 것입니다. 번호 대신 문자 모양으로 표시하는 방법이 있습니까? –

+0

"쇼"란 무엇을 의미합니까? 적어도'print' 함수/문장은 이스케이프 문자없이 그것들을 보여줘야합니다. 그렇지 않으면'os.walk'과 관련이 없으므로 새로운 질문으로 게시하십시오. – Philipp

2

파이썬 3은 기본적으로 모든 문자열을 유니 코드로 만듭니다. 아마도 파이썬 3이 파이썬 3과 함께 작동하는 이유 일 것입니다.

버전 2.3에서 변경 listdir 상태

에 대한 문서 : 경로는 유니 코드 객체 인 경우 윈도우 NT/2K/XP 및 유닉스는, 결과는 유니 코드 개체의 목록을 것입니다 . 코드화 할 수없는 파일 이름은 여전히 ​​문자열 객체로 반환됩니다.

그래서 나는 유니 코드로 결과를 얻으려면 Python 2에서 명시 적으로 유니 코드 문자열로 경로를 지정해야한다고 생각합니다.

0

파이썬 2.x는 유니 코드를 지원하지만 유니 코드는 기본값이 아닙니다 (3.x와 동일).

파이썬 2.x에서 문자열은 기본적으로 8 비트 바이트 배열이므로 파일 시스템으로 작업 할 때 UTF-8로 인코딩 된 파일 이름이 표시됩니다.

파이썬 3.x에서 모든 문자열은 실제로 기본적으로 유니 코드이므로 UTF-8 디코딩은 IO 서브 루틴에서 발생합니다.

관련 문제