업데이트 : 파이썬 3.6 구현의 PEP 528 : UTF-8로 변경 Windows 콘솔 인코딩 : Windows에서 기본 콘솔은 이제 모든 유니 코드 문자를 사용할 수 있습니다. 내부적으로는 같은 유니 코드 API 사용 아래에 언급 된 패키지를 . 지금 작동해야합니다.win-unicode-console
print(unicode_string)
내가 얻을 UnicodeEncodeError: 'charmap' codec can't encode character...
오류입니다.
이 오류는 인쇄하려는 유니 코드 문자를 현재 ( chcp
) 콘솔 문자 인코딩 으로 표현할 수 없음을 의미합니다 . 코드 페이지는 종종 cp437
~ 1M 유니 코드 문자에서 ~ 0x100 문자 만 나타낼 수있는 8 비트 인코딩입니다 .
>>> u "\ N {EURO SIGN}". encode ( 'cp437')
역 추적 (가장 최근 통화) :
...
UnicodeEncodeError : 'charmap'코덱은 위치 0에서 '\ u20ac'문자를 인코딩 할 수 없습니다.
캐릭터는
Windows 콘솔은 유니 코드 전용 문자를 허용하지 않기 때문이라고 생각합니다. 이 문제를 해결하는 가장 좋은 방법은 무엇입니까?
Windows 콘솔은 유니 코드 문자를 허용 하며 해당 글꼴이 구성된 경우 해당 문자를 표시 할 수도 있습니다 (BMP 만 해당) . @Daira Hopwood의 답변WriteConsoleW()
에서 제안한대로 API를 사용해야합니다 . 패키지를 투명하게 호출 할 수 있습니다. 즉, package 를 사용하면 스크립트를 수정하지 않아도됩니다 .win-unicode-console
T:\> py -mpip install win-unicode-console
T:\> py -mrun your_script.py
Python 3.4, 유니 코드, 다른 언어 및 Windows와의 관계는 무엇입니까?를 참조하십시오 .
?
이 상황에서 Python이 자동으로 인쇄하는 대신 실패 하게 만드는 방법 이 있습니까?
?
귀하의 경우에 모든 불가피한 문자를 대체하는 것으로 충분하다면 envvar을 설정할 수 PYTHONIOENCODING
있습니다 :
T:\> set PYTHONIOENCODING=:replace
T:\> python3 -c "print(u'[\N{EURO SIGN}]')"
[?]
Python 3.6 이상에서 envvar이 비어 있지 않은 문자열로 설정되어 PYTHONIOENCODING
있지 않으면 대화식 콘솔 버퍼에 대해 envvar로 지정된 인코딩 이 무시됩니다 PYTHONLEGACYWINDOWSIOENCODING
.