Я думаю, что есть кодирование / декодирование путаницы повсюду. Вы начинаете с объекта Unicode:
u'\xe4\xf6\xfc'
Это объект Unicode, три символа - это кодовые точки Unicode для "äöü". Если вы хотите превратить их в Utf-8, вы должны кодировать их:
>>> u'\xe4\xf6\xfc'.encode('utf-8')
'\xc3\xa4\xc3\xb6\xc3\xbc'
Результирующие шесть символов являются представлением Utf-8 слова «äöü».
Если вы звоните decode(...)
, вы пытаетесь интерпретировать символы как некоторую кодировку, которую все еще необходимо преобразовать в юникод. Так как это уже Unicode, это не работает. Ваш первый вызов пытается преобразование Ascii в Unicode, второй вызов преобразование Utf-8 в Unicode. Так как u'\xe4\xf6\xfc'
не является ни действительным Ascii, ни действительным Utf-8, эти попытки преобразования завершаются неудачей.
Дальнейшая путаница может возникнуть из-за того факта, что '\xe4\xf6\xfc'
также является кодировкой Latinja / ISO-8859-1 "äöü". Если вы пишете обычную строку Python (без начального «u», помечающего ее как Unicode), вы можете преобразовать ее в объект Unicode с помощью decode('latin1')
:
>>> '\xe4\xf6\xfc'.decode('latin1')
u'\xe4\xf6\xfc'