不保留urllib.urlretrieve编码

时间:2014-06-28 08:39:40

标签: python python-3.x urllib

我正在使用python 3.4。

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

修改

这是页面的原始部分:

                        

«Écoute,mon peuple,je parle;
Moi,Dieu,je suis ton Dieu! Je Je pas pas pas p p p;
tes holocaustes sont toujours devant moi。

««je se prendrai pas un seul taureau de ton domaine,
pasunbélierdetes enclos。
Tout le gibierdesforêtsm'appartient
et lelebétaildeshautspâ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 sangdesbéliers?

««Qu'as-tuàrécitermeslois,ààdetermonmonianceàlabouche,
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 Je Je pas pas p p tes tes tes
tes holocaustes sont toujours devantmoi.
Jene prendrai pas un seul taureau de ton domaine,
pasunb lierdetesenclos.

Tout le gibierdesfor tsm'appartient
et leb taildeshautsp turages。

Sij'ai faim,irai-je te le dire?
Le monde et sa richessem'appartiennent. Vais-je manger la chair des taureaux
et boire le sangdesb liers?

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

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

2 个答案:

答案 0 :(得分:1)

您可以使用显示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')))

答案 1 :(得分:0)

我建议用它来为你处理:它将加载的文件实现转换为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!'

BeautifulSoup文档:here