Выход Unicode в stdout Python при запуске из cmd.exe

Я запускаю Windows 7, и его консоль настроена на использование шрифта Consolas, что дает мне возможность выхода из Unicode. Возможность читать Unicode в консоли была доказана мною много раз для таких программ, как Far Manager: и кириллицы, и немецкие буквы äöü можно читать на одной и той же консоли в одной строке без переключения кодирования.

Теперь о Python.

Я очень стараюсь, но не вижу Unicode в его выходе. По умолчанию print(sys.stdout.encoding) печатает cp866 а stdout не может выводить никаких символов, кроме ASCII и кириллицы.

Это дает мне следующие результаты:

print("Ля-ля äöüÄÖÜß")

UnicodeEncodeError: 'charmap' codec can't encode characters in position 6-12: character maps to <undefined>

print("Ля-ля äöüÄÖÜß".encode("utf-8"))

b'\xd0\x9b\xd1\x8f-\xd0\xbb\xd1\x8f \xc3\xa4\xc3\xb6\xc3\xbc\xc3\x84\xc3\x96\xc3\x9c\xc3\x9f'

Хорошо, я установил PYTHONIOENCODING среды PYTHONIOENCODING в пакетном файле:

SET PYTHONIOENCODING=UTF-8

и получил:

 print(sys.stdout.encoding) UTF-8 print("Ля-ля äöüÄÖÜß") ╨Ы╤П-╨╗╤П ├д├╢├╝├Д├Ц├Ь├Я print("Ля-ля äöüÄÖÜß".encode("utf-8"))` b'\xd0\x9b\xd1\x8f-\xd0\xbb\xd1\x8f \xc3\xa4\xc3\xb6\xc3\xbc\xc3\x84\xc3\x96\xc3\x9c\xc3\x9f' , print(sys.stdout.encoding) UTF-8 print("Ля-ля äöüÄÖÜß") ╨Ы╤П-╨╗╤П ├д├╢├╝├Д├Ц├Ь├Я print("Ля-ля äöüÄÖÜß".encode("utf-8"))` b'\xd0\x9b\xd1\x8f-\xd0\xbb\xd1\x8f \xc3\xa4\xc3\xb6\xc3\xbc\xc3\x84\xc3\x96\xc3\x9c\xc3\x9f' 

Что делать?

One Solution collect form web for “Выход Unicode в stdout Python при запуске из cmd.exe”

Фактически, есть небольшая ошибка при взаимодействии между консолью Python и Windows (см. http://bugs.python.org/issue1602 ). Можно читать и писать Unicode в консоли Windows, используя функции C ReadConsoleW, WriteConsoleW вместо ReadConsole и WriteConsole. Таким образом, одно из каждых рабочих задач – это написать собственный объект stdout и stdin, вызвав ReadConsoleW, WriteConsoleW через ctypes. Для вывода это работает, но для ввода возникает проблема, что интерактивный интерпретатор Python фактически не использует sys.stdin для ввода ввода (но работает функция call ()) – см. http://bugs.python.org/issue17620 .

Многие люди говорят, что проблема с консолью Windows. Но вы действительно можете вводить символы Unicode (если у вас есть правильная раскладка клавиатуры) без проблем. Они отображаются без проблем. Вы даже можете запустить файл с именем «∫.py» с некоторыми аргументами Unicode, и он правильно запущен, а аргументы соответствуют ожиданиям в строках sys.argv.

Обновление. Я создал пакет Python для решения этих проблем. См. https://github.com/Drekin/win-unicode-console и https://pypi.python.org/pypi/win_unicode_console . Установить с помощью pip install win_unicode_console . Он работает, по крайней мере, для меня на Python 3.4, Python 3.5 и Python 2.7.

  • UnicodeDecodeError Загрузка с помощью sqlalchemy
  • Работа с кодировкой utf-8 в источнике Python
  • Проблема китайского Юникода?
  • Как отобразить utf-8 в консоли Windows
  • Python - Python 3.1 не может обрабатывать кодированные файлы UTF-16?
  • Почему SQLAlchemy create_engine с charset = utf8 возвращает тип python <str>, а не тип <unicode>?
  • Почему установка UnixodeError не устанавливает локаль?
  • Сделать utf8 доступным для чтения в файле
  • Python - лучший язык программирования в мире.