繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM