urllib.url检索编码不是kep

2024-10-02 22:32:18 发布

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

我使用的是python3.4。在

当我在utf-8文件上使用urllib.request.urlretrieve(link, filename="file.html")时,结果文件.html未正确编码。如何确保文件使用utf-8编码? 在这种情况下,如何实现.decode(utf-8)?在

编辑

以下是页面的原始部分:

« Écoute, mon peuple, je parle ; 
Moi, Dieu, je suis ton Dieu ! 
Je ne t'accuse pas pour tes sacrifices ;
tes holocaustes sont toujours devant moi. 

« Je ne prendrai pas un seul taureau de ton domaine,
pas un bélier de tes enclos. 
Tout le gibier des forêts m'appartient
et le bétail des hauts pâturages.

« Si j'ai faim, irai-je te le dire ?
Le monde et sa richesse m'appartiennent. 
Vais-je manger la chair des taureaux
et boire le sang des béliers ? 

« Qu'as-tu à réciter mes lois, 
à garder mon alliance à la bouche, 
toi qui n'aimes pas les reproches
et rejettes loin de toi mes paroles ? »

这是我在保存的文件中看到的:

� �coute, mon peuple, je parle ;�
Moi, Dieu, je suis ton Dieu !�
Je ne t'accuse pas pour tes sacrifices ;
tes holocaustes sont toujours devant moi.�

� Je ne prendrai pas un seul taureau de ton domaine,
pas un b�lier de tes enclos.�
Tout le gibier des for�ts m'appartient
et le b�tail des hauts p�turages.

� Si j'ai faim, irai-je te le dire ?
Le monde et sa richesse m'appartiennent.�
Vais-je manger la chair des taureaux
et boire le sang des b�liers ?�

� Qu'as-tu � r�citer mes lois,�
� garder mon alliance � la bouche,�
toi qui n'aimes pas les reproches
et rejettes loin de toi mes paroles ?��

我注意到在页面的某些部分,重音字符并不是真正的utf-8编码,但是浏览器会正确地显示出来。例如,不是É,而是É,当文件被下载时,这似乎会导致问题。在


Tags: 文件ledepastesutfetun
2条回答

可以使用here显示的方法逐行取消对文件中HTML转义序列的转义。在

import html.parser
h = html.parser.HTMLParser()
with urllib.request.urlopen(link) as fin, open(
           "file.html", 'w', encoding='utf-8') as fout:
    for line in fin:
        fout.write(h.unescape(line.decode('utf-8')))

我建议您使用它来处理这个问题:它将加载的文档简单地转换为utf-8

markup = "<h1>Sacr\xc3\xa9 bleu!</h1>"
soup = BeautifulSoup(markup)
soup.h1
# <h1>Sacré bleu!</h1>
soup.h1.string
# u'Sacr\xe9 bleu!'

美化组文档:here

相关问题 更多 >