Вы говорите, что "" "sys.getdefaultencoding () говорит, что кодировкой командной строки по умолчанию является 'ascii'" ""
sys.getdefaultencoding НИЧЕГО не говорит о кодировке «командной строки».
В Windows sys.stdout.encoding
должен выполнить эту работу. На моей машине он содержит cp850
, когда Python запускается в окне командной строки, и cp1252
в IDLE. Ваши должны содержать cp866
и cp1251
соответственно.
Обновление Вы говорите, что вам все еще нужен cp866 в режиме ожидания. Обратите внимание:
IDLE 2.6.4
>>> import os
>>> os.popen('chcp').read()
'Active code page: 850\n'
>>>
Поэтому, когда ваше приложение запускается, проверьте, работаете ли вы в Windows, и если да, проанализируйте результат os.popen('chcp').read()
. Текст перед :
, вероятно, зависит от локали. codepage = result.split()[-1]
может быть достаточно хорошим "разбором". В Unix, у которой нет разделенной личности Windows / MS-DOS, sys.stdout.encoding
должно быть в порядке.