Я возвращаю из библиотеки, что надеется быть неправильной строкой unicode:
>>> title
u'Sopet\xc3\xb3n'
Теперь, те два шестнадцатеричных Escape там являются кодировкой UTF-8 для ЛАТИНСКОЙ СТРОЧНОЙ БУКВЫ U+00F3 O С ОСТРЫМ. Насколько я понимаю, строка unicode в Python должна иметь фактический символ, не кодировка UTF-8 для символа, таким образом, я думаю, что это неправильно и по-видимому ошибка или в библиотеке или в моем входе, правильно?
Вопрос, как делают я (a) распознаю, что у меня есть закодированный текст UTF-8 в моей строке unicode и (b) преобразовываю это в надлежащую строку unicode?
Я озадачен на (a), поскольку нет ничего неправильно, мудро кодированием, о той исходной строке (т.е., оба - допустимые символы самостоятельно, u'\xc3\xb3'
== Ã ³, но они не то, что, как предполагается, там),
Похоже, что я могу достигнуть (b) оценкой () луга, который repr () производил минус "u" впереди для получения ул. и затем декодирования ул. с UTF-8:
>>> eval(repr(title)[1:]).decode("utf-8")
u'Sopet\xf3n'
>>> print eval(repr(title)[1:]).decode("utf-8")
Sopetón
Но это кажется немного топорным. Существует ли официально санкционированный способ вытащить необработанные данные из строки unicode и обработки что как обычная строка?
а) Попробуйте поставить описанным ниже способом.
b)
>>> u'Sopet\xc3\xb3n'.encode('latin-1').decode('utf-8')
u'Sopet\xf3n'