Если s=url['title']
делает s
равным этому:
In [48]: s=u'Oscar Winners Best Pictures Box Set \xc2\xa36.49'
Тогда проблема в
- в коде, который определяет
url
,
- или контент из Интернета
MAL сформированным.
В случае 1 нам нужно увидеть код, который определяет url
.
В случае 2 быстрым и грязным обходным решением будет кодирование объекта Unicode s
с помощью кодека raw-unicode-escape
:
In [49]: print(s)
Oscar Winners Best Pictures Box Set £6.49
In [50]: print(s.encode('raw-unicode-escape'))
Oscar Winners Best Pictures Box Set £6.49
См. Также ТАК вопрос .
Относительно названий, таких как s=u'Star Trek XI £3.99'
: Опять же, было бы неплохо исправить проблему, прежде чем она перейдет к этому этапу - возможно, посмотрев, как определяется url
. Но если предположить, что контент из Интернета имеет неправильную форму, обходной путь будет:
In [86]: import re
In [87]: print(re.sub(r'&#x([a-fA-F\d]+);',lambda m: unichr(int(m.group(1),base=16)),s))
Star Trek XI £3.99
Немного объяснения:
Обратите внимание, что
In [51]: x=u'£'
In [53]: x.encode('utf-8')
Out[53]: '\xc2\xa3'
Таким образом, объект Unicode u'£'
, закодированный кодеком utf-8
, становится строковым объектом '\xc2\xa3'
.
Каким-то образом url['title']
становится объектом Юникод .
u'\xc2\xa3'
. (u
имеет большое значение!)
Таким образом, у нас есть u'\xc2\xa3'
, когда мы желаем '\xc2\xa3'
.
Кодирование объекта Unicode u'\xc2\xa3'
с помощью кодека raw-unicode-escape
преобразует его в '\xc2\xa3'
.