Почему sys.getdefaultencoding () отличается от sys.stdout.encoding и как это нарушает строки Unicode?

Я провел несколько злых часов в поисках проблемы со строками Unicode, которая была разбита на что-то, что Python (2.7) скрывает от меня, и я до сих пор неТ понять. Во-первых, я пытался использоватьu".." Строки последовательно в моем коде, но это привело к печально известнойUnicodeEncodeError, Я пытался с помощью.encode('utf8')но это неТ тоже не поможет. Наконец, оказалось, что я не долженне использовать ни один, и все это работает автоматически. Тем не менее, я (здесь я должен отдать должное другу, который помог мне) заметил нечто странное, ударившись головой о стену.sys.getdefaultencoding() возвращаетсяASCII, в то время какsys.stdout.encoding возвращаетсяUTF-8,, 1. в приведенном ниже коде работает нормально без каких-либо измененийsys и 2. поднимаетUnicodeEncodeError, Если я изменю кодировку системы по умолчанию сreload(sys).setdefaultencoding("utf8"), тогда 2. работает нормально. Мой вопрос заключается в том, почему две переменные кодирования отличаются в первую очередь и как мне удается использовать неправильную кодировку в этом простом куске кода? Пожалуйста, не'отправить меня вЮникод HOWTOЯЯ читал это, очевидно, в десятках вопросов о.UnicodeEncodeError

#  -*- coding: utf-8 -*-
import sys


class Token:
    def __init__(self, string, final=False):
        self.value = string
        self.final = final

    def __str__(self):
        return self.value

    def __repr__(self):
        return self.value

print(sys.getdefaultencoding())
print(sys.stdout.encoding)

# 1.
myString = "I need 20 000€."
tok = Token(myString)
print(tok)

reload(sys).setdefaultencoding("utf8")

# 2.
myString = u"I need 20 000€."
tok = Token(myString)
print(tok)

Ответы на вопрос(2)

Ваш ответ на вопрос