unicode - setdefaultencoding - 파이썬3 유니코드 에러




python 3.0, print() 출력 유니 코드를 만드는 법? (4)

저는 WinXP 5.1.2600에서 중국어 pinyin과 관련된 Python 응용 프로그램을 작성하고 있습니다.이 응용 프로그램은 끝없는 유니 코드 문제로 인해 발생합니다. 파이썬 3.0으로 전환하면 많은 것들이 해결되었습니다. 그러나 콘솔 출력을위한 print () 함수는 어떤 이상한 이유 때문에 유니 코드를 인식하지 못합니다. 여기에 작은 프로그램이 있습니다.

print('sys.stdout encoding is "' + sys.stdout.encoding + '"')
str1 = 'lüelā'
print(str1)

출력은 다음과 같습니다 (가독성을 위해 각괄호를 대괄호로 변경).

    sys.stdout encoding is "cp1252"
    Traceback (most recent call last):
      File "TestPrintEncoding.py", line 22, in [module]
        print(str1)
      File "C:\Python30\lib\io.py", line 1491, in write
        b = encoder.encode(s)
      File "C:\Python30\lib\encodings\cp1252.py", line 19, in encode
        return codecs.charmap_encode(input,self.errors,encoding_table)[0]
    UnicodeEncodeError: 'charmap' codec can't encode character '\u0101' 
    in position 4: character maps to [undefined]

ü = \ xfc = 252는 상위 ASCII이므로 아무런 문제가 없습니다. 그러나 ā = \ u0101은 8 비트를 넘습니다.

누구나 sys.stdout의 인코딩을 'utf-8'로 변경하는 방법을 알고 있습니까? 문서를 올바르게 이해한다면 Python 3.0이 더 이상 codecs 모듈을 사용하지 않는다는 것을 명심하십시오.

죄송 합니다만, 나는 당신에게 서문없이 프로그램을주었습니다. 주어진 3 줄 앞에는 다음과 같이 시작됩니다.

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import sys

유감스럽게도 "coding :"행에 지정된 코드 는 콘솔 출력이 아닌 소스 코드 의 코딩입니다. 그러나 당신의 생각에 감사드립니다!


Windows 명령 프롬프트 (cmd.exe)는 파이썬이 올바른 방식으로 내부적으로 처리하더라도 사용중인 유니 코드 문자를 표시 할 수 없습니다. IDLE, Cygwin 또는 유니 코드를 올바르게 표시 할 수있는 다른 프로그램을 사용해야합니다.

자세한 설명은이 글을 참고하십시오 : http://www.nabble.com/unable-to-print-Unicode-characters-in-Python-3-td21670662.html



Windows에서 파이썬으로 유니 코드 문자를 표시하는 문제는 알려져 있습니다. 아직 공식적인 해결책은 없습니다. 바른 일은 winapi 함수 WriteConsoleW를 사용하는 것입니다. 다른 관련 문제가 있기 때문에 작업 솔루션을 만드는 것은 중요하지 않습니다. 그러나이 문제와 관련하여 Python을 수정하려고하는 패키지를 개발했습니다. https://github.com/Drekin/win-unicode-console을 참조 하십시오 . 또한 문제에 대한 자세한 설명을 읽을 수 있습니다. 패키지는 pypi ( https://pypi.python.org/pypi/win_unicode_console )에 있으며 pip를 사용하여 설치할 수 있습니다.






stdout