Хорошо, я хочу напечатать строку в моей консоли xp x. Есть несколько символов, которые не могут быть напечатаны консолью, поэтому мне нужно закодировать мой stdout.encoding, который является «cp437». но печатая закодированную строку, «ß» печатается как «\ xe1». после декодирования обратно в unicode и печати строки, я получаю вывод, который я хочу. но это несколько неправильно. как правильно напечатать строку и получить? для непечатаемых символов?python3 print unicode to windows xp console encode cp437
>>>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: excactly то, что я искал. большое спасибо!
Вы можете установить 'sys.stdout = io.TextIOWrapper (sys.stdout.detach(), sys.stdout.encoding, 'replace')', чтобы сохранить ту же кодировку, но с заменой. – eryksun
Я не вижу ничего плохого в последней строке, которую у вас есть, это именно тот ответ, который я собирался написать. –
Спасите себе массу неприятностей и просто получите Python IDE, поддерживающую UTF-8. Консоль практически бесполезна для всех, кроме символов локали по умолчанию. –