IDLE如何打印sys.stdout.encoding不支持的字符(python 3.7)

时间:2018-12-07 17:41:31

标签: python python-3.x unicode encoding

我正在尝试在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不支持的字符。

0 个答案:

没有答案