我有一些来自网络的文本,例如:

£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/

    10-12 16:37