Это просто UTF-8 data . Используйте .decode
, чтобы преобразовать его в unicode
.
>>> 'D\xc3\xa9cor'.decode('utf-8')
u'D\xe9cor'
Вы можете выполнить дополнительное декодирование escape-строки для случая 'D\\xc3\\xa9cor'
.
>>> 'D\xc3\xa9cor'.decode('string-escape').decode('utf-8')
u'D\xe9cor'
>>> 'D\\xc3\\xa9cor'.decode('string-escape').decode('utf-8')
u'D\xe9cor'
>>> u'D\\xc3\\xa9cor'.decode('string-escape').decode('utf-8')
u'D\xe9cor'
Чтобы справиться и со вторым случаем, вам необходимо определить, является ли ввод unicode
, и преобразовать его в str
сначала.
>>> def conv(s):
... if isinstance(s, unicode):
... s = s.encode('iso-8859-1')
... return s.decode('string-escape').decode('utf-8')
...
>>> map(conv, [u'D\\xc3\\xa9cor', u'D\xc3\xa9cor', 'D\\xc3\\xa9cor', 'D\xc3\xa9cor'])
[u'D\xe9cor', u'D\xe9cor', u'D\xe9cor', u'D\xe9cor']