Как изменить stdin и stdout, кодирующий на Python 2

Вероятно, самая близкая вещь к совершенно произвольному и бессмысленному разделению ML и DM - это неконтролируемые методы против контролируемого обучения .

Выберите ML, если у вас есть данные тренировки для вашей целевой функции.

Выберите DM, когда вам нужно изучить свои данные.

17
задан Gilles 'SO- stop being evil' 5 June 2019 в 17:57
поделиться

2 ответа

Простой фрагмент кода, который я использовал, который работает на меня на человечности: python2.7 и python3.6

from sys import version_info
if version_info.major == 2:  # for python2
    import codecs
    # for stdin
    UTF8Reader = codecs.getreader('utf8')
    sys.stdin = UTF8Reader(sys.stdin)
    # for stdout
    UTF8Writer = codecs.getwriter('utf8')
    sys.stdout = UTF8Writer(sys.stdout)
elif version_info.major == 3:  # for python3
    import codecs
    # for stdin
    UTF8Reader = codecs.getreader('utf8')
    sys.stdin = UTF8Reader(sys.stdin.buffer)
    # for stdout
    UTF8Writer = codecs.getwriter('utf8')
    sys.stdout = UTF8Writer(sys.stdout.buffer)
0
ответ дан 30 November 2019 в 10:58
поделиться

Вы можете сделать это, не полагаясь на неявное кодирование при печати. В любом случае не полагаться на это - хорошая идея - неявное кодирование используется только при печати в стандартный вывод и когда стандартный вывод подключен к терминалу.

Лучше использовать везде unicode и везде использовать codecs.open или codecs.getwriter . Вы оборачиваете sys.stdout в объект, который автоматически кодирует ваши строки Unicode в UTF-8, используя, например:

sys.stdout = codecs.getwriter('utf-8')(sys.stdout)

Однако это будет работать, только если вы используете Unicode везде. Итак, используйте юникод везде. Действительно везде.

18
ответ дан 30 November 2019 в 10:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: