Как из Python вывести на Windows-консоль строку в Юникоде?
1,00
р.
р.
Простой print() не срабатывает. Интерпретатор валится с жалобой на то, что он сам не может сконвертировать Юникод в ту кодировку, которая используется в Windows-консоли. Может быть ему можно как-то помочь? Возможно, есть какой-нибудь модуль, который умеет это делать.
Ответ Обновление: Python 3.6 использует Unicode API для ввода/вывода в консоль как упомянутый ниже win_unicode_console пакет (подробнее в PEP 528). По умолчанию поддерживаются произвольные Unicode символы. Простой print(unicode_string) теперь работает без установки дополнительного ПО (консольный шрифт, поддерживающий желаемые символы, по прежнему нужно настраивать). На границе с Windows-консолью используется Unicode, внутри sys.stdin, sys.stdout, sys.stderr используют utf-8 кодировку. Это может сломать код, который использовал двоичный интерфейс для вывода в консоль и соответственно использовал OEM codepage, к примеру cp866 кодировку. cp866 не совместима с utf-8, можно получить кракозябры в таком случае. Необходимо либо исправить код, чтобы он текст, а не байты в консоль выводил, либо выставить %PYTHONLEGACYWINDOWSIOENCODING% переменную окружения, чтобы старое поведение восстановить. Поведение для перенаправленного ввода в файл, в канал (pipe) осталось прежним: используется locale.getpreferredencoding(False) по умолчанию (ANSI codepage, к примеру cp1251).
Это давняя проблема в Питоне. Пакет win_unicode_console добавляет наиболее полную поддержку Юникода как для вывода, так и для ввода текста в консоли—можно использовать этот пакет не меняя своего исходного кода c помощью включённого run модуля: C:\> py -m pip install win-unicode-console C:\> py -m run path\your_script.py Это позволяет печатать произвольные Юникод символы, даже те которые не представимы в текущей кодировке консоли (такой как cp866), например, print(u'\N{snowman}') -> ☃ (могут быть корректно показаны все BMP Unicode символы, поддерживаемые настроенными шрифтами. Даже не-BMP символы можно скопировать в другие программы из консоли).
В качестве одноразового решения (без новых пакетов), можно установить переменную окружения PYTHONIOENCODING: C:\> set PYTHONIOENCODING=utf-8 C:\> py path\your_script.py > output_in_utf8.txt Оба решения, не добавляют жёстко прописанную кодировку внутрь скрипта, делая их более переносимыми.