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