如何从字符串中删除某些utf-8字符?

时间:2018-11-28 17:36:16

标签: python python-2.7 beautifulsoup

就我而言,我想从字符串中专门删除字符。我使用BeautifulSoup解析某些html段落,并从中获取子字符串。到目前为止,我的代码如下:

# -*- coding: cp1252 -*-
from bs4 import BeautifulSoup as bs
import re

soup = bs(open("file.xhtml"), 'html.parser')

for tag in soup.find_all('p', {"class": "fnp2"}) :
    line = unicode(str(tag).split(':')[0], "utf-8")
    line = re.sub('(<p class="fnp2">)(\d+) ', '', line)
    line = line.replace('„', '')
    print line

但是,我总是收到UnicodeDecodeError

line = line.replace('„', '')

UnicodeDecodeError: 'ascii' codec can't decode byte 0x84 in position
0: ordinal not in range(128)

对此有什么解决方案?

1 个答案:

答案 0 :(得分:0)

代码中的line变量是unicode对象。当您调用line.replace时,Python期望第一个参数也是unicode对象。如果您改为提供str对象,Python将尝试使用系统默认编码(您可以通过unicode检查)将其自动解码为sys.getdefaultencoding()字符串。

显然,您的情况是系统编码为ascii。无法使用'„'编解码器对字节字符串ascii进行解码,因为'„'不是ACII符号,这会导致您看到异常。

您可以通过changing the default system encoding来解决问题,方法与提供'„'字符串时所用的问题相同(我想是CP1252),但是这种解决方法仅从学术角度来看很有趣,因为它只是把问题扫了个遍。

首先,只需为unicode方法提供一个replace对象,即可正确,安全且轻松地解决您的问题。这就像在代码中将'„'替换为u'„'一样简单。