If, s=url['title']
makes s
等于这个:
In [48]: s=u'Oscar Winners Best Pictures Box Set \xc2\xa36.49'
那么问题是
- 在定义的代码中
url
,
- 否则来自网络的内容是
格式错误。
如果是情况 1,我们需要查看定义的代码url
.
如果是情况 2,一个快速而肮脏的解决方法是对 unicode 对象进行编码s
与raw-unicode-escape
codec:
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']
被定义为unicode object
u'\xc2\xa3'
. (The u
会有很大的不同!)
因此我们有u'\xc2\xa3'
当我们渴望'\xc2\xa3'
。
对 unicode 对象进行编码u'\xc2\xa3'
与raw-unicode-escape
编解码器将其转换为'\xc2\xa3'
.