在用lxml分析文件后无法正确显示unicode字符串,对于简单文件读取可以正常工作

2024-06-17 13:36:32 发布

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

我试图使用lxml模块来解析HTML文件,但是我很难让它处理一些UTF-8编码的数据。我在Windows上使用python2.7。例如,考虑一个没有字节顺序标记的UTF-8编码文件,它只包含文本字符串Québec。如果我只是使用常规文件处理程序读取文件的内容并对结果string对象进行解码,那么我会得到一个长度为6unicode的字符串,当写回文件时,这个字符串看起来很不错。但是如果我用lxml解析这个文件,我会看到一个长度为7的unicode字符串,当写回一个文件时,这个字符串看起来很奇怪。有人能解释一下lxml的不同之处以及如何获得原始的漂亮字符串吗?在

例如:

import lxml.html as html
from lxml import etree

f = open("output.txt", "w")

text = open("input.txt").read().decode("utf-8")
f.write("String of type '%s' with length %d: %s\n" % (type(text), len(text), text.encode("utf-8")))

root = html.parse("input.txt")
text = root.xpath(".//p")[0].text.strip()
f.write("String of type '%s' with length %d: %s\n" % (type(text), len(text), text.encode("utf-8")))

output.txt中生成输出:

^{pr2}$

编辑

这里的部分解决方法似乎是使用以下方法解析文件:

etree.parse("input.txt", etree.HTMLParser(encoding="utf-8"))

或者

html.parse("input.txt", etree.HTMLParser(encoding="utf-8"))

然而,据我所知,基本etree库缺少一些用于选择器之类的便利类,因此一个允许我使用的解决方案lxml.html没有etree.HTMLParser()还是有用的。在


Tags: 文件字符串texttxt编码inputparsehtml
1条回答
网友
1楼 · 发布于 2024-06-17 13:36:32

函数lxml.html.parse已经使用了lxml.html.HTMLParser,所以你不应该真的反对使用

html.parse("input.txt", html.HTMLParser(encoding="utf-8"))

处理utf-8数据

相关问题 更多 >