替换python中的特殊字符

Mar*_*ona 3 python string

我有一些来自网络的文字:

£6.49

显然我希望这显示为:

£6.49

到目前为止,我已尝试过以下内容:

s = url['title']
s = s.encode('utf8')
s = s.replace(u'Â','')
Run Code Online (Sandbox Code Playgroud)

还有一些变种(在这个论坛上发现之后)

但是我仍然没有运气:

UnicodeDecodeError:'ascii'编解码器无法解码位置100中的字节0xc3:序号不在范围内(128)

谁能帮助我做到这一点?

更新:

添加repr示例和内容类型

u'Star Trek XI £3.99'
u'Oscar Winners Best Pictures Box Set \xc2\xa36.49'
Content-Type: text/html; charset=utf-8
Run Code Online (Sandbox Code Playgroud)

提前致谢.

unu*_*tbu 7

如果,s=url['title']使得s等于以下内容:

In [48]: s=u'Oscar Winners Best Pictures Box Set \xc2\xa36.49'
Run Code Online (Sandbox Code Playgroud)

然后问题是

  1. 在定义的代码中url,
  2. 或者来自网络的内容是不正确的.

如果是案例1,我们需要查看定义的代码url.

如果是案例2,那么快速而肮脏的解决方法是s使用raw-unicode-escape编解码器对unicode对象进行编码:

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
Run Code Online (Sandbox Code Playgroud)

另见这个问题.


关于这样的标题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
Run Code Online (Sandbox Code Playgroud)

一点点解释:

注意

In [51]: x=u'£'
In [53]: x.encode('utf-8')
Out[53]: '\xc2\xa3'
Run Code Online (Sandbox Code Playgroud)

因此u'£',用utf-8编解码器编码的unicode对象成为字符串对象'\xc2\xa3'.

不知何故,url['title']被定义为unicode对象 u'\xc2\xa3'.(这u有很大的不同!)

因此u'\xc2\xa3',我们渴望的时候'\xc2\xa3'.u'\xc2\xa3'使用raw-unicode-escape编解码器对unicode对象进行编码将其转换为'\xc2\xa3'.