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

조회수 1862회

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

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}]')"
    [?]
    

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)