我正在尝试在Windows(Python 3.7 64位)的空闲外壳中打印心脏(♥)字符。 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")
♥
我问这个问题的动机是,在尝试打印之前,我想知道控制台是否支持某些unicode字符。每次打印有风险的字符时,我都可以尝试捕获,也可以尝试打印这些符号,并根据程序的成功来确定程序的行为,但是我希望有一个更优雅的解决方案(如果没有)一直在尝试捕获错误的时间有所延迟,并且没有在stdout上打印出奇怪的句子)。目前,我使用:
sys.stdout.encoding.lower().startswith('utf')
来支持控制台,
但是,如此处所示,某些控制台(包括我的控制台)可以打印sys.stdout.encoding不支持的字符。