Как IDLE печатает символ, не поддерживаемый sys.stdout.encoding (python 3.7) - PullRequest
0 голосов
/ 07 декабря 2018

Я пытаюсь напечатать символ сердца (♥) в пустой оболочке Windows (Python 3.7 64-bit).Код sys.stdout.encoding - «cp1255».Поскольку этот символ не может быть закодирован в 'cp1255', должна быть выброшена ошибка UnicodeEncodeError.Однако почему-то печатные работы.Как оно работает?

>>> import sys
>>> sys.stdout.encoding
'cp1255'
>>> u"\u2665".encode('cp1255')
Traceback (most recent call last):
  File "<pyshell#0>", line 1, in <module>
    u"\u2665".encode('cp1255')
  File "C:\Users\kobip\AppData\Local\Programs\Python\Python37\lib\encodings\cp1255.py", line 12, in encode
    return codecs.charmap_encode(input,errors,encoding_table)
UnicodeEncodeError: 'charmap' codec can't encode character '\u2665' in position 0: character maps to <undefined>
>>> print (u"\u2665")
♥

Моя мотивация при задании вопроса заключается в том, что я хочу узнать, прежде чем пытаться печатать, поддерживает ли консоль некоторые символы Юникода.Я могу сделать попытку и поймать каждый раз, когда я печатаю рискованные символы, или я могу выполнить начальную попытку печати этих символов и определить поведение программы на основе ее успеха, но я предпочитаю более элегантное решение, если это возможно (беззадержка попыток отловить ошибки все время и без вывода странного предложения на стандартный вывод).В настоящее время я использую: sys.stdout.encoding.lower().startswith('utf') для поддержки консоли Chekc, но, как показано здесь, некоторые консоли (включая мою) могут печатать символы, не поддерживаемые sys.stdout.encoding.

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