Я провел несколько гневных часов в поисках проблемы со строками 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. работает нормально. Мой вопрос заключается в том, почему две переменные кодирования отличаются в первую очередь и как мне удается использовать неправильную кодировку в этом простом фрагменте кода? Пожалуйста, не посылайте меня к 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)