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表示。
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的开始或结束。 美丽的汤用\xa0
replace了一个空string,这为我解决了这个问题。
mytext = soup.get_text(strip=True)