我试图清理所有的HTML的一个字符串,这样最终输出是一个文本文件。我对各种“转换器”一些一些研究,我开始努力创造我自己的字典中的实体和符号,并运行一个替换字符串倾斜。我正在考虑这一点,因为我想这个过程自动化,并没有在底层的HTML的质量有很多可变性。要开始比较我的解决方案的速度,例如pyparsing我决定测试使用字符串替换方法\ XA0的替代方案之一。我获得

UnicodeDecodeError: 'ascii' codec can't decode byte 0xa0 in position 0: ordinal not in range(128)

的代码的实际行为

s=unicodestring.replace('\xa0','')

反正-I决定,我需要与R键前言,所以我跑这行代码:

s=unicodestring.replace(r'\xa0','')

运行没有错误,但我当我看到S的片我看到\ XAO仍然存在。

有帮助吗?

解决方案

可以是自己应该做

s=unicodestring.replace(u'\xa0',u'')

其他提示

s=unicodestring.replace('\xa0','')

..试图创建Unicode字符\xa0,这是无效的以ASCII sctring(在Python的缺省字符串类型直到版本3 x)

r'\xa0'原因没有错误是因为在原始字符串,转义序列没有效果。而不是试图编码\xa0成Unicode字符,它看见字符串作为“反斜杠”,“文字x”和等等..

以下是相同的:

>>> r'\xa0'
'\\xa0'
>>> '\\xa0'
'\\xa0'

这是一些在Python V3解决,因为默认的字符串类型是unicode的,所以你可以做..

>>> '\xa0'
'\xa0'
  

我试图清理所有的HTML的一个字符串,这样最终输出是一个文本文件

我会强烈建议 BeautifulSoup 这一点。编写一个HTML清洁工具是困难的(考虑到大多数HTML是多么的可怕),和BeautifulSoup做了伟大的工作,在两个解析HTML,以及处理Unicode的..

>>> from BeautifulSoup import BeautifulSoup
>>> soup = BeautifulSoup("<html><body><h1>Hi</h1></body></html>")
>>> print soup.prettify()
<html>
 <body>
  <h1>
   Hi
  </h1>
 </body>
</html>

看那编解码器标准库,特别是在编码解码方法

还有一个很好的文章 这使它都在一起。

代替此,最好使用标准的Python特性。

例如:

string = unicode('Hello, \xa0World', 'utf-8', 'replace')

string = unicode('Hello, \xa0World', 'utf-8', 'ignore')

其中replace将取代\xa0\\xa0

但如果\xa0真的是没有意义的你,你要删除它,然后用ignore

有关HTML清洁刚一说明。这是非常非常困难的,因为

<
body
>

是写HTML的一种有效方式。只是一个供参考。

您可以将它以这种方式为Unicode:

print u'Hello, \xa0World'  # print Hello,  World
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top