就我而言,我想从字符串中专门删除„
和”
字符。我使用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)
对此有什么解决方案?
答案 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'„'
一样简单。