Python 如何在不丢失其他字符的情况下修复错误解码?

Python 如何在不丢失其他字符的情况下修复错误解码?,python,character-encoding,Python,Character Encoding,我的日常爱好是抓取网站和收集大量数据。 最近,我观察到一个案例,其中一些捕获的数据在订单“100英镑”的基础上出现10%的格式错误,并且包含一个重音字母“与右单引号组合” 我曾尝试使用ascii和ignore对其进行编码,但丢失了英镑符号 >>>“100英镑订单10%折扣”。编码“ascii”,“忽略”。解码“utf-8” “100份订单打9折” 此外,还尝试了拉丁语-1,但解码后得到了一个新字符,而不是字母->ã 那么,如何修复此编码并保留英镑或其他货币符号?也许您可以通过删除除英镑符号以外的

我的日常爱好是抓取网站和收集大量数据。 最近,我观察到一个案例,其中一些捕获的数据在订单“100英镑”的基础上出现10%的格式错误,并且包含一个重音字母“与右单引号组合”

我曾尝试使用ascii和ignore对其进行编码,但丢失了英镑符号

>>>“100英镑订单10%折扣”。编码“ascii”,“忽略”。解码“utf-8” “100份订单打9折” 此外,还尝试了拉丁语-1,但解码后得到了一个新字符,而不是字母->ã


那么,如何修复此编码并保留英镑或其他货币符号?

也许您可以通过删除除英镑符号以外的所有非ASCII字符来清理字符串

下面是一个函数的示例:

def remove_non_ascii(s):
    return "".join(i for i in s if any([ord(i)<128, ord(i) in [163]]))

你没有遇到错误字符串的源html?html页面的元字符集是utf-8。是的,这并没有真正回答我的问题。你有没有消息来源?很可能是你解析网站的方式有问题,或者是HTML中有什么东西在创建一些你的脚本不希望看到的字符。这是一个很好的清理方法。你刚才给了我一个想法。在我的情况下,.joini代表我在文本中如果ordi
def remove_non_ascii(s):
    return "".join(i for i in s if any([ord(i)<128, ord(i) in [163]]))
>>> example = '10% Off Orders of Ã’£100'
>>> remove_non_ascii(example)
'10% Off Orders of £100'
>>>