Python, Unicode и консоль Windows - PullRequest
       179

Python, Unicode и консоль Windows

121 голосов
/ 08 августа 2008

Когда я пытаюсь напечатать строку Unicode в консоли Windows, я получаю ошибку UnicodeEncodeError: 'charmap' codec can't encode character ..... Я предполагаю, что это потому, что консоль Windows не принимает символы только для Unicode. Какой лучший способ обойти это? Можно ли каким-то образом заставить Python автоматически печатать ? вместо сбоя в этой ситуации?

Редактировать: Я использую Python 2.5.


Примечание: @ LasseV.Karlsen ответ с галочкой является устаревшим (с 2008 года). Пожалуйста, используйте решения / ответы / предложения ниже с осторожностью !!

@ JFSebastian ответ более актуален на сегодняшний день (6 января 2016 года).

Ответы [ 13 ]

1 голос
/ 11 мая 2017

Python 3.6 windows7: есть несколько способов запустить python, вы можете использовать консоль python (на которой есть логотип python) или консоль windows (на ней написано cmd.exe).

Я не смог напечатать символы utf8 в консоли Windows. Печать символов utf-8 выдает мне эту ошибку:

OSError: [winError 87] The paraneter is incorrect 
Exception ignored in: (_io-TextIOwrapper name='(stdout)' mode='w' ' encoding='utf8') 
OSError: [WinError 87] The parameter is incorrect 

После попытки и не понять ответа выше я обнаружил, что это была только проблема с настройкой. Щелкните правой кнопкой мыши в верхней части окна консоли cmd, на вкладке font выберите консоль lucida.

1 голос
/ 16 декабря 2015

Вид относящегося к ответу Я. Ф. Себастьяна, но более прямой.

Если у вас возникла эта проблема при печати на консоль / терминал, сделайте следующее:

>set PYTHONIOENCODING=UTF-8
0 голосов
/ 14 мая 2016

Джеймс Сулак спросил,

Есть ли способ заставить Python автоматически печатать a? вместо неудачи в этой ситуации?

Другие решения рекомендуют попытаться изменить среду Windows или заменить функцию Python print(). Ответ ниже приближается к выполнению запроса Сулака.

В Windows 7 Python 3.5 может быть настроен для печати Unicode без выдачи UnicodeEncodeError следующим образом:

Вместо: print(text)
замена: print(str(text).encode('utf-8'))

Вместо генерирования исключения Python теперь отображает непечатаемые символы Юникода в виде \ xNN шестнадцатеричных кодов, например ::

Halmalo n \ xe2 \ x80 \ x99 \ xc3 \ xa9tait plus qu \ xe2 \ x80 \ x99un точка нуар

вместо

Halmalo n’était plus qu’un point noir

Конечно, последний предпочтительнее при прочих равных условиях , но в остальном он абсолютно точен для диагностических сообщений. Поскольку он отображает Unicode как буквенные байтовые значения, первый также может помочь в диагностике проблем кодирования / декодирования.

Примечание: Вышеуказанный вызов str() необходим, потому что в противном случае encode() заставляет Python отклонять символ Unicode в виде набора чисел.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...