2016-10-14 6 views
1

Windows 10에서 아나콘다에서 파이썬 2.7.12를 실행 중입니다. 배포판에 ipython 5.1.0이 포함되어 있습니다. mysql 데이터베이스에서 쿼리 된 열의 특정 열을 인쇄하는 프로그램을 작성했습니다. 열은 유니 코드로 된 문자열을 포함합니다. 프로그램이 파이썬에서 실행될 때 문자열 중 하나의 유니 코드 문자가 처음 보일 때 예외가 발생합니다. ipython의 동일한 프로그램이 작동하여 모든 문자가 적절하게 표시됩니다. 파이썬을 사용하여 실행하면파이썬과 ipython은 유니 코드 문자를 다르게 취급합니다.

name = u'O\u2019Connor' 
try: 
    print name 
except: 
    print "exception 1 thrown" 

try: 
    print u"{}".format(name) 
except: 
    print "exception 2 thrown" 

try: 
    print u"%s" % name 
except: 
    print 'exception 3 thrown' 

는, 예외가 매번 발생하는 다음과 같이

나는 별도의 작은 프로그램으로 문제를 증류했다. ipython에서 실행될 때 세 개의 print 문이 모두 작동합니다. 분명히 유니 코드가 처리되는 방식에는 두 버전간에 차이가 있습니다. 차이점은 무엇이며 내 프로그램이 어느 환경에서도 실행되도록 처리해야합니까?

+0

예외는 무엇입니까? – Ouroborus

+0

생성 된 실행중인 파이썬 : 파일 "C : \ Anaconda2 \ lib \ encodings \ cp437.py", 줄 12, 인코딩 return codecs.charmap_encode (input, errors, encoding_map) UnicodeEncodeError : 'charmap'코덱은 문자를 인코딩 할 수 없습니다. 1 '위치의 u'\ u2019 ': 문자가 sizzzzlerz

+0

으로 매핑됩니다. ipython이 유니 코드를 직접 인쇄하는 동안 파이썬이 유니 코드에서 변환 할 수없는 코덱을 사용하여 인쇄하려고 할 가능성이 있습니다. – Ouroborus

답변

0

평범한 파이썬이 전체를 표현할 수없는 문자 당 1 바이트 제한 ASCII 상위 집합 인 cp437을 사용하는 반면 ipython은 정상적인 출력 인코딩 (아마 UTF-8 또는 UTF-16)을 사용하는 것처럼 보입니다. 유니 코드 범위.

명령 프롬프트를 제어 할 수있는 경우 Python을 시작하기 전에 chcp 65001을 실행하여 UTF-8 ("Python"이 실행해야하는)에 "코드 페이지"를 사용하게 할 수 있습니다. 이 번호를 the default for command prompts in general to avoid future problems으로 설정하는 것이 좋습니다.

+0

필자는 ** 콘솔에 코드 페이지 65001, Python 또는 IO 용 C 표준 라이브러리를 사용하는 다른 환경을 설정할 것을 권장하지는 않습니다. 콘솔의이 코드 페이지 (및 로케일 기본값 DBCS로 명시 적으로 지원되지 않는 다른 멀티 바이트 코드 페이지)를 처리하는 데 심각한 버그가 있습니다. 당신은 맹 글링되고 반복 된 결과물을 얻고 입력이 없거나 비 ASCII 문자를 사용하려고 시도합니다. 파이썬 3.6은 마침내이 문제를 해결하지만, 그때까지는 Windows 명령 프롬프트가 깨져서 그것에 대해 할 수있는 일이 많지 않습니다. – bobince

+1

IPython 5에서 IPython은 유니 코드 문자를 콘솔에 인쇄하기 위해 [win_unicode_console] (https://pypi.python.org/pypi/win_unicode_console)을 사용하고 있습니다. 이는 Python 3.6에 통합 된 기능과 유사합니다. –

관련 문제