2013-12-19 4 views
0

예를 들어, 파이썬 스크립트를 실행하기로 읽습니다. 이 명령은 윈도우에 저장되었을 수있는 텍스트 파일에 있었다파이썬 인수 코드

['test.py', '\xe2\x80\x94-test', '\xe2\x80\x9cTest\xe2\x80\x9d'] 

나는 OS X의에서 터미널로 복사하고 명령을 붙여되었다 : 그리고 sys.argv에 인쇄 밝혔다. 이전에이 문제가 없었기 때문에 가능한 원인은 무엇입니까?

터미널에서 명령을 다시 입력해도 제대로 작동합니다. 스크립트에서 인수를 처리하여 올바르게 해석 할 수있는 방법이 있습니까?

+1

정말 텍스트 파일 이었습니까, 아니면 Word 문서와 같았습니까? – user2357112

+0

Windows에서는 Notepad ++에, OS X에서는 TextWrangler에 있었을 수도 있습니다. 그러나 임시 새 파일에 복사되었거나 저장되지 않은 새 파일로 적절한 형식 설정이 없습니다. – jensph

답변

4

귀하의 윈도우 편집기 전각 대시와 일반 대시와 '공상'스타일이 인용과 따옴표 대체 :

>>> '\xe2\x80\x94-test'.decode('utf8') 
u'\u2014-test' 
>>> print '\xe2\x80\x94-test'.decode('utf8') 
—-test 
>>> '\xe2\x80\x9cTest\xe2\x80\x9d'.decode('utf8') 
u'\u201cTest\u201d' 
>>> print '\xe2\x80\x9cTest\xe2\x80\x9d'.decode('utf8') 
“Test” 
>>> import unicodedata 
>>> for u in u'\u2014\u201c\u201d': 
...  print u, unicodedata.name(u) 
... 
— EM DASH 
“ LEFT DOUBLE QUOTATION MARK 
” RIGHT DOUBLE QUOTATION MARK 

텍스트 지향 편집기 다음 번 사용을; 워드 프로세서는 텍스트를 '더 예쁘'버전으로 대체해야 할 의무가 있습니다.

당신은 unicode.translate() 호출 할 수있는 : 그것은 작동 할 일반 인용 부호가 없기 때문에 쉘이 공백 올바르게 구문 분석하지 않습니다

>>> import sys 
>>> sys.argv = ['test.py', '\xe2\x80\x94-test', '\xe2\x80\x9cTest\xe2\x80\x9d'] 
>>> map = {0x2014: u'-', 0x201c: u"'", 0x201d: u"'"} 
>>> sys.argv[1:] = [s.decode('utf8').translate(map).encode('utf8') for s in sys.argv[1:]] 
>>> sys.argv 
['test.py', '--test', "'Test'"] 

참고; 위의 방법 먼저을 사용하여 텍스트 파일을 번역 한 다음 제대로 인용 된 문자열을 셸에 붙여 넣기를 원할 수 있습니다.

+0

완벽한, 감사합니다. 해독하려고하지는 않겠지 만 문제가 있음을 어떻게 든 감지 한 다음 구문 분석하지 않는 인수를 사용하여 터미널에 경고를 출력합니다. – jensph