Python:从string中删除\ xa0?

我目前使用美丽的汤来parsing一个HTML文件,并调用get_text() ,但似乎我留下了很多\ xa0代表空格的Unicode。 有没有一种有效的方法来删除所有在Python 2.7中,并将其更改为空格? 我想更普遍的问题是,有没有办法删除Unicode格式?

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

编辑:这个问题似乎是通过str.replace(u'\xa0', ' ').encode('utf-8') ,但只是做.encode('utf-8')没有replace()似乎导致它甚至吐出更奇怪的字符,例如\ xc2。 任何人都可以解释吗?

\ xa0实际上是Latin1(ISO 8859-1)中的非破坏空间,也是chr(160)。 你应该用空格replace它。

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

当.encode('utf-8'),它将把unicode编码为utf-8,这意味着每个unicode可以用1到4个字节表示。 对于这种情况,\ xa0由2个字节\ xc2 \ xa0表示。

请阅读http://docs.python.org/howto/unicode.html

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

尝试:

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

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

我遇到了这个问题,从python的一个sqlite3数据库拉一些数据。 上面的答案不适用于我(不知道为什么),但是这样做: line = line.decode('ascii', 'ignore')但是,我的目标是删除\ xa0s,而不是用空格replace它们。

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

尝试这个:

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

在search不可打印字符的问题时,我最终在这里。 我使用MySQL UTF-8 general_ci处理波兰语。 对于有问题的string,我必须按如下步骤进行操作:

 text=text.replace('\xc2\xa0', ' ') 

这只是快速的解决方法,你可能应该尝试一些正确的编码设置。

尝试使用.strip()在你的line line.strip()为我工作得很好

0xA0(Unicode)是UTF-8中的0xC2A0。 .encode('utf8')将会把你的Unicode 0xA0replace为UTF-8的0xC2A0。 因此,0xC2s的显现…编码并没有取代,你可能已经意识到了。

试试这个代码

 import re re.sub(r'[^\x00-\x7F]+','','paste your string here').decode('utf-8','ignore').strip() 

在“美丽的汤”中,您可以传递get_text() strip参数,从文本的开头和结尾剥离空白区域。 这将删除\xa0或任何其他空白,如果它发生在string的开始或结束。 美丽的汤用\xa0replace了一个空string,这为我解决了这个问题。

 mytext = soup.get_text(strip=True)