2010-06-20 2 views
0

PortablePython을 내 시스템에 설치하기 만하면 PHP에서 python 스크립트를 실행할 수 있고 디렉토리의 모든 파일을 나열하는 아주 기본적인 코드 (아래) 그러나 일본어 파일 이름에서는 작동하지 않습니다. 그것은 영어 파일 이름과 잘 작동하지만, 디렉토리에 일본어 문자를 포함하는 파일을 넣을 때 오류 (아래)가 발생합니다.
Python과 glob을 사용하지 않고 Windows에서 일본어 파일을 읽는 중

import os, glob 

path = 'G:\path' 
for infile in glob.glob(os.path.join(path, '*')): 
    print("current file is: ", infile) 

내가 그것을 뱉어 명령 프롬프트 또는 PHP에서 'PortablePython \ 응용 프로그램 \의 python.exe를 "test.py"를'실행하려고하지만 때, 'PyScripter - Portable.exe'를 사용하여 잘 작동 다음과 같은 오류 아웃 :

current file is: Traceback (most recent call last): 
    File "test.py", line 5, in <module> 
    print("current file is: ", infile) 
    File "PortablePython\App\lib\io.py", line 1494, in write 
    b = encoder.encode(s) 
    File "PortablePython\App\lib\encodings\cp437.py", line 19, in encode 
    return codecs.charmap_encode(input,self.errors,encoding_map)[0] 
UnicodeEncodeError: 'charmap' codec can't encode characters in position 37-40: character maps to <undefined> 



내가 ... 파이썬에 아주 새로운 해요 그냥 Windows에서 유니 코드 파일 이름을 읽을 수 없습니다와 PHP의 문제를 해결하기 위해이 사용하고 그래서 나는 이 일이 정말로 필요합니다. 당신이 저에게 줄 수있는 도움은 위대 할 것입니다.

+0

역 추적을 읽고'glob'는 작동하지만'print'는 그렇지 않습니다! –

답변

1

: 파이썬의 파일 시스템 관련 함수를 사용하면 유니 코드 파일 이름과 함께 작업 할 것을 알려야합니다

path = u'G:\path' 
for infile in glob.glob(os.path.join(path, u'*')): 
    print(u"current file is: ", infile) 

.

+0

3.0을 사용하고 있습니다. 여전히 작동합니까? – Jon

+0

흠 ... 그렇지 않을 수도 있습니다. 파이썬 3.0은 이미 문자열에 유니 코드를 사용합니다. –

+0

호기심에서 벗어난 상태에서 print 문을이 문구로 바꿀 때 어떤 일이 발생합니까? –

2

인쇄하려는 출력 대상이 파일 시스템과 동일한 인코딩을 사용하지 않는 것이 문제 일 수 있습니다. 일반적인 규칙은 텍스트를 가능한 한 빨리 유니 코드로 가져와 출력 할 때 필요한 바이트 인코딩 (예 : utf-8)으로 변환해야한다는 것입니다.

파일 이름을 다루므로 시스템 인코딩에 있어야합니다.

import sys 
fse = sys.getfilesystemencoding() 
filenames = [unicode(x, fse) for x in glob.glob(os.path.join(path, '*'))] 

지금 모든 파일 이름은 유니 코드이며, 명령 프롬프트 또는 무엇이든의 출력에 올바른 인코딩을 파악해야 (당신은 U 플래그 명령 프롬프트의 유니 코드 버전을 실행할 수 있습니다 : "cmd /u를")이 같은 유니 코드로 문자열을 변경 시도, 파이썬 2.X를 사용하는 가정

+0

그건 나를 위해 작동하지 않습니다 (나는 3.0 btw를 사용하고 있습니다). 팁? 또한 cmd/u는 여전히 동일한 오류를 발생시킵니다. – Jon

+0

'TypeError : 2.7 유니 코드가 지원되지 않습니다 .'를 얻었습니다. – runDOSrun

관련 문제