[英]How to remove certain utf-8 characters from a string?
就我而言,我想从字符串中专门删除„
和”
字符。 我使用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)
有什么解决方案呢?
您代码中的line
变量是unicode
对象。 当您调用line.replace
Python期望第一个参数也是unicode
对象。 如果改为提供str
对象,Python将尝试使用系统默认编码(可以通过sys.getdefaultencoding()
检查sys.getdefaultencoding()
将其自动解码为unicode
字符串。
显然,在您的情况下,系统编码为ascii
。 不能使用ascii
编解码器解码字节字符串'„'
,因为'„'
不是ACII符号,这会导致您看到异常。
您可以通过将默认系统编码更改为用于提供'„'
字符串的相同系统编码 (CP1252,我猜)来解决该问题,但是这种解决方法仅从学术角度来看很有趣,因为它只是扫地毯下的问题。
解决您的问题的适当,安全且容易的方法是,首先简单地为replace
方法提供一个unicode
对象。 这就像在代码中用u'„'
替换'„'
一样简单。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.