파이썬, 유니코드 그리고 윈도우즈 콘솔
조회수 1867회
파이썬 2.5를 사용하고 있습니다. 윈도우즈 콘솔 상에 유니코드 문자열을 출력하려 하면, UnicodeEncodeError: 'charmap' codec can't encode character ....
라고 에러가 발생합니다. 저는 윈도우즈 콘솔이 유니코드 문자를 허용하지 않기 때문에 발생하는 에러라고 추측하고 있는데, 이를 해결할 방법이 있을까요? 에러가 발생되는 대신에 ?
를 출력하도록 할 방법은 없을까요?
1 답변
-
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}]')" [?]
댓글 입력