如何在Python中使用unicode

2024-05-26 16:26:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试清除字符串中的所有HTML,以便最终输出为文本文件。我对各种“转换器”进行了一些研究,开始倾向于为实体和符号创建自己的字典,并对字符串运行替换。我之所以考虑这一点,是因为我希望自动化这个过程,而且底层html的质量有很多变化。为了开始比较我的解决方案和其中一个备选方案(例如pyparsing)的速度,我决定使用字符串方法replace测试replace of\xa0。我得到一个

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

实际的代码行是

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

总之,我决定在它前面加上一个r,所以我运行了这行代码:

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

它运行没有错误,但是当我看到一片s时,我看到它仍然存在


Tags: 字符串代码in实体字典过程html质量
3条回答

也许你应该这样做

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

…正在尝试创建unicode字符\xa0,该字符在ASCII字符串中无效(Python中的默认字符串类型,直到版本3.x)

之所以r'\xa0'没有错误,是因为在原始字符串中,转义序列没有效果。它并没有试图将\xa0编码为unicode字符,而是将字符串视为“文字反斜杠”、“文字x”等。。

以下内容相同:

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

这是Python v3中解决的问题,因为默认的字符串类型是unicode,所以您只需执行。。

>>> '\xa0'
'\xa0'

I am trying to clean all of the HTML out of a string so the final output is a text file

对此我强烈建议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>

查看codecs标准库,特别是Codec基类中提供的encodedecode方法。

还有一篇很好的文章here把这一切放在一起。

相关问题 更多 >

    热门问题