我有一些来自网络的文本,例如:
£6.49
显然,我希望将其显示为:
6.49 英镑
到目前为止,我已经尝试了以下方法:
s = url['title']
s = s.encode('utf8')
s = s.replace(u'Â','')
还有一些变体(在同一个论坛上找到它之后)
但仍然没有运气,因为我不断得到:
有人能帮我把这个做对吗?
更新:
添加 repr 示例和内容类型
u'Star Trek XI £3.99'
u'Oscar Winners Best Pictures Box Set \xc2\xa36.49'
Content-Type: text/html; charset=utf-8
提前致谢。
最佳答案
如果 s=url['title']
使 s
等于:
In [48]: s=u'Oscar Winners Best Pictures Box Set \xc2\xa36.49'
那么问题来了
url
的代码中,畸形。
如果是案例 1,我们需要查看定义
url
的代码。如果是情况 2,一个快速而简单的解决方法是使用
s
编解码器对 unicode 对象 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
另请参阅此 SO question 。
关于
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'
因此,使用
u'£'
编解码器编码的 unicode 对象 utf-8
成为字符串对象 '\xc2\xa3'
。不知何故,
url['title']
被定义为 unicode 对象u'\xc2\xa3'
。 (u
有很大的不同!)因此,当我们想要
u'\xc2\xa3'
时,我们有 '\xc2\xa3'
。使用
u'\xc2\xa3'
编解码器对 unicode 对象 raw-unicode-escape
进行编码将其转换为 '\xc2\xa3'
。关于python - 替换python中的特殊字符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4705793/