gpt4 book ai didi

python - lxml.html 解析和带有请求的 utf-8

转载 作者:行者123 更新时间:2023-12-01 05:22:09 25 4
gpt4 key购买 nike

我使用requests来检索一个包含一些unicode字符的url,并想对其进行一些处理,然后将其写出来。

r=requests.get(url)
f=open('unicode_test_1.html','w');f.write(r.content);f.close()
html = lxml.html.fromstring(r.content)
htmlOut = lxml.html.tostring(html)
f=open('unicode_test_2.html','w');f.write(htmlOut);f.close()

在unicode_test_1.html中,所有字符看起来都很好,但在unicode_test_2.html中,某些字符变成了乱码,这是为什么?

然后我尝试了

html = lxml.html.fromstring(r.text)
htmlOut = lxml.html.tostring(html,encoding='latin1')
f=open('unicode_test_2.html','w');f.write(htmlOut);f.close()

看来现在可以工作了。但我不知道为什么会发生这种情况,总是使用 latin1 吗?r.text 和 r.content 之间有什么区别,为什么我不能使用 encoding='utf-8' 写出 html?

最佳答案

您尚未指定您使用的是 python 2 还是 3。根据您使用的版本,编码的处理方式完全不同。无论如何,以下建议或多或少是通用的。

r.text 和 r.content 之间的区别在请求文档中。简单地说,Requests 将尝试为您找出字符编码,并在解码后返回 Unicode。这可以通过 r.text 访问。要仅获取字节,请使用 r.content。

您确实需要掌握编码。阅读 http://www.joelonsoftware.com/articles/Unicode.html并观看https://www.youtube.com/watch?v=sgHbC6udIqc开始。另外,搜索“克服挫败感:在 python2 中正确使用 unicode”以获得更多帮助。

澄清一下,这并不像总是使用一种编码而不是另一种编码那么简单。通过以字节为单位执行任何 I/O 来制作 Unicode 三明治,并在应用程序中使用 Unicode。如果您从字节 (isinstance(mytext, str)) 开始,您需要知道解码为 Unicode 的编码,如果您从 Unicode (isinstance(mytext, unicode)) 开始,您应该编码为 UTF-8,因为它将处理所有世界人物。

确保您的编辑器、文件、服务器和数据库也配置为 UTF-8,否则您会得到更多“乱码”。

如果您需要进一步帮助,请发布脚本的源文件和输出。

关于python - lxml.html 解析和带有请求的 utf-8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22112411/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com