2017-12-30 8 views
-1

이것은 나를 미치게합니다. "é"문자로 딕트를 pprinting하려고하는데, 나는 이것을 Im 'Python 3을 사용합니다.pprint : UnicodeEncodeError : 'ascii'코덱은 문자를 인코딩 할 수 없습니다.

from pprint import pprint 
    knights = {'gallahad': 'the pure', 'robin': 'the bravé'} 
    pprint (knights) 

오류

File "/data/prod_envs/pythons/python36/lib/python3.6/pprint.py", line 176, in _format 
stream.write(rep) 
UnicodeEncodeError: 'ascii' codec can't encode character '\xe9' in position 43: ordinal not in range(128) 

나는 파이썬 ASCII의 문서를 읽어하지만, 떨어져 DICT을 고려하고에 잘못된 값을 다시 작성하는 것보다 다른이 문제를 해결하는 빠른 방법이 보이지 않는다 '.encode'를 통해 ASCII 값을 입력 한 다음 다시 딕트를 다시 조합하십시오.

Dict을 분해하지 않고 인쇄 할 수있는 방법이 있습니까?

감사합니다.

+1

어떻게 스크립트를 실행하고 있습니까? 'sys.stdout.encoding'은 무엇을 말합니까? –

+1

Windows 사용자입니까? – usr2564301

+0

안녕하세요, 아니요, 리눅스 상자에 있습니다. – user2071786

답변

3

이것은 pprint과 관련이 없습니다. 모듈 문자열을 다른 문자열로 포맷 한 다음 서식이 지정된 문자열을 기본 스트림으로 전달합니다. 그래서 é 문자 (U + 00E9)가 stdout에 기록 될 때 오류가 발생합니다.

이제는 기본 OS와 Python 인터프리터의 구성에 따라 달라집니다.

$ export PYTHONIOENCODING=Latin1 
$ python 

를 (또는 실제에 따라 PYTHONIOENCODING=utf8를 사용 : 리눅스 나 다른 유닉스 계열 시스템에서는 파이썬을 시작하기 전에 환경 변수 PYTHONIOENCODING를 설정하여 터미널 세션에서 UTF-8 또는 라틴 문자 집합 선언을 시도 할 수 있습니다 터미널 또는 터미널 창 인코딩).

+0

괜찮 았는데, 제 컴퓨터에서 이것을 시도해보십시오 :'echo "hello worldé"'그게 효과가 있습니다. 그래서 OS 설정이라면 stdout으로 출력해도 에러가 발생합니다. 하지만 .... – user2071786

관련 문제