Вы путаете "Unicode" и "UTF-8".Ваша строка s
не является Unicode;это строка байтов в определенной кодировке (но не в UTF-8, более вероятно iso-8859-1 или около того). Переход от строки байтов к unicode
выполняется путем декодирования данных, а не кодирование .Переход от юникода к байтовой строке - это кодирование.Возможно, вы хотели сделать s
строкой в юникоде:
>>> s = u'ad\xc2-ven\xc2-ture'
>>> s.encode('utf8', 'ignore')
'ad\xc3\x82-ven\xc3\x82-ture'
Или, возможно, вы хотите обрабатывать строку байтов как UTF-8, но игнорировать недопустимые последовательности, в этом случае вы декодируете строка байтов с игнорированием в качестве обработчика ошибок:
>>> s = 'ad\xc2-ven\xc2-ture'
>>> u = s.decode('utf-8', 'ignore')
>>> u
u'adventure'
>>> u.encode('utf-8')
'adventure'