파이썬, 유니코드 그리고 윈도우즈 콘솔


파이썬 2.5를 사용하고 있습니다. 윈도우즈 콘솔 상에 유니코드 문자열을 출력하려 하면, UnicodeEncodeError: 'charmap' codec can't encode character ....라고 에러가 발생합니다. 저는 윈도우즈 콘솔이 유니코드 문자를 허용하지 않기 때문에 발생하는 에러라고 추측하고 있는데, 이를 해결할 방법이 있을까요? 에러가 발생되는 대신에 ?를 출력하도록 할 방법은 없을까요?

  • 2016년 06월 14일에 작성됨

조회수 116


1 답변


좋아요
0
싫어요
채택취소하기

UnicodeEncodeError: 'charmap' codec can't encode character ....라고 에러가 발생합니다.

이 에러는 현재 출력하고자 하는 유니코드 문자가 현재 사용중인 콘솔의 문자 인코딩 (chcp) 방식으로는 표현할 수 없음을 나타냅니다. 코드 페이지는 주로 cp437과 같은 8비트 인코딩을 사용합니다 :

>>> u"\N{EURO SIGN}".encode('cp437')
Traceback (most recent call last):
...
UnicodeEncodeError: 'charmap' codec can't encode character '\u20ac' in position 0:
character maps to

저는 윈도우즈 콘솔이 유니코드 문자를 허용하지 않기 때문에 발생하는 에러라고 추측하고 있는데, 이를 해결할 방법이 있을까요?

윈도우즈 콘솔은 유니코드 문자를 허용하며, 일치하는 폰트가 존재하다면 출력 또한 할 수 있습니다. WriteConsoleW() API를 사용하면 됩니다. 만약 win-unicode-console package을 사용하고 있다면 스크립트를 수정할 필요도 없고, 해서도 안됩니다.

T:\> py -mpip install win-unicode-console
T:\> py -mrun your_script.py

What's the deal with Python 3.4, Unicode, different languages and Windows?을 참고하세요.

에러가 발생되는 대신에 ?를 출력하도록 할 방법은 없을까요?

만약 인코딩할 수 없는 문자를 ?로 교체하는 정도로 만족하신다면, PYTHONIOENCODING 환경변수를 설정하시면 됩니다.

T:\> set PYTHONIOENCODING=:replace
T:\> python3 -c "print(u'[\N{EURO SIGN}]')"
[?]
  • 2016년 06월 15일에 작성됨

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close