【发布时间】:2015-04-15 19:32:02
【问题描述】:
好的,我想在我的 windows xp 控制台中打印一个字符串。 控制台无法打印几个字符,所以我必须编码到我的 stdout.encoding ,即“cp437”。但打印编码字符串时,'ß' 打印为 '\xe1'。在解码回 unicode 并打印字符串后,我得到了我想要的输出。但这感觉有些不对劲。如何正确打印字符串并获取?对于不可打印的字符?
>>>var
'Bla \u2013 großes'
>>>print(var)
UnicodeEncodeError: 'charmap' codec can't encode character '\u2013'
>>>var.encode('cp437', 'replace')
b'Bla ? gro\xe1es'
>>>print(var.encode('cp437', 'replace'))
b'Bla ? gro\xe1es'
>>>var.encode('cp437', 'replace').decode('cp437')
'Bla ? großes'
>>>print(var.encode('cp437', 'replace').decode('cp437'))
Bla ? großes
编辑: @Mark Ransom:因为我打印了很多,所以我觉得代码很臃肿:/
@eryksun:正是我想要的。非常感谢!
【问题讨论】:
-
您可以设置
sys.stdout = io.TextIOWrapper(sys.stdout.detach(), sys.stdout.encoding, 'replace')保持相同的编码,但需要替换。 -
我看不出你的最后一行有什么问题,这正是我要写的答案。
-
省去很多麻烦,只需要一个支持 UTF-8 的 Python IDE。除了默认的语言环境字符之外,控制台对任何东西都毫无用处。
标签: windows python-3.x unicode printing