我目前正在使用Beautiful Soup来解析HTML文件并调用get_text(),但似乎我留下了很多\xa0 Unicode表示空格。在python2.7中是否有一种有效的方法将它们全部删除,并将它们更改为空格?我想更普遍的问题应该是,有没有办法移除Unicode格式?

我尝试使用:line = line。replace(u'\xa0',' '),正如另一个线程所建议的那样,但这将\xa0改为u,所以现在我到处都是“u”。):

编辑:这个问题似乎可以通过str.replace(u'\xa0', ' ').encode('utf-8')来解决,但是仅仅使用.encode('utf-8')而不使用replace()似乎会导致它吐出更奇怪的字符,例如\xc2。有人能解释一下吗?


当前回答

尝试在行尾使用.strip() Line.strip()很适合我

其他回答

我用python从sqlite3数据库中提取一些数据时遇到了同样的问题。上面的答案对我没用(不知道为什么),但这个做到了:line = line.decode('ascii', 'ignore')然而,我的目标是删除\xa0,而不是用空格替换它们。

我从Ned Batchelder的超级有用的unicode教程中得到了这个。

Python的unicodedata库中有很多有用的东西。其中之一是.normalize()函数。

Try:

new_str = unicodedata.normalize("NFKD", unicode_str)

如果你没有得到你想要的结果,用上面链接中列出的任何其他方法替换NFKD。

试试这个:

string.replace('\\xa0', ' ')

它相当于一个空格字符,所以去掉它

print(string.strip()) # no more xa0

在Beautiful Soup中,您可以将strip参数传递给get_text(),该参数将删除文本开头和结尾的空白。这将删除\xa0或任何其他空白,如果它出现在字符串的开头或结尾。Beautiful Soup将空字符串替换为\xa0,这为我解决了问题。

mytext = soup.get_text(strip=True)