Я пытаюсь напечатать символ сердца (♥) в пустой оболочке 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.