以下是代码:
#!/usr/bin/python
# -*- coding: utf-8 -*-
from lxml import etree
def str_repr(el, enc='utf-8'):
doctype = ''
text = etree.tostring(el, pretty_print=True, method='html', encoding=enc)
text = doctype+text
return text
def clear_scripts(text):
parser = etree.HTMLParser()
tree = etree.parse(StringIO.StringIO(text), parser)
return str_repr(tree.getroot())
text = '''»'''
text_final = clear_scripts(text)
问题是text_final中没有sybmol »
,但是»
(整行是<html><body><p>»</p></body></html>
为什么会这样?如何只留下符号»
?
答案 0 :(得分:0)
创建HTML解析器时,它不知道要解析文本的编码,也不知道默认为UTF-8。您可以通过替换
来解决此问题parser = etree.HTMLParser()
与
parser = etree.HTMLParser(encoding="utf-8")
您也想告诉浏览器这一点,如果您将脚本的输出视为HTML,您仍会在许多浏览器中看到乱码文本,因为默认情况下它们不会指望utf-8。您生成的HTML应包含head
部分,如下所示:
<head><meta charset="utf-8"></head>
答案 1 :(得分:0)
文本应该是unicode字符串
text = u'»'