在Python中显示HTML请求时编码错误

2024-06-25 23:04:55 发布

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

我不明白为什么当我使用Requests library发出一个HTTP请求时,我要求显示命令.text,特殊字符(例如重音符号)被编码(例如é=é)。在

但是当我尝试r.encoding时,我得到{}。在

另外,这个问题只出现在一些网站上。有时我有正确的字符,但有时,一点也不正确。在

尝试如下:

r = requests.get("https://gks.gs/login")
print r.text

显示了编码字符,我们可以看到Mot de passe oublié ?。在

我不明白为什么。你认为这可能是因为https吗?请问怎么修这个?在


Tags: texthttps命令http编码get网站library
3条回答

这些是HTML character entity references,最简单的解码方法是:

在Python 2.x中:

>>> import HTMLParser
>>> HTMLParser.HTMLParser().unescape('oublié')
'oublié'

在Python 3.x中:

^{pr2}$

它们是在HTML编码字符集中定义的HTML escape codes。即使某个文档可以用UTF-8编码,HTML(及其祖辈SGML)还是在ASCII的旧时代定义的。一个访问WWW上HTML页面的系统可能本身就支持扩展字符,也可能不支持,开发人员需要一种方法为某些用户定义“高级”字符,而对于其他系统不支持这些字符的用户,则会出现错误。由于UTF-8标准化在当时的创始人眼中只是一线曙光,因此开发了一种编码系统来描述不属于ASCII的字符。由浏览器开发人员来实现一种显示这些扩展字符的方法,可以是通过glyph,也可以是通过扩展字体。在

使用&sometihg;对特殊字符进行编码在任何HTML中都是“合法的”,尽管看起来有点奇怪,但它们被认为是有效的。在

文本应该由某个HTML浏览器呈现,它将产生正确的结果,不管你发现这些字符是使用给定的构造还是直接编码的。在

有关如何转换这些编码字符的说明,请参见HTML Entity Codes to Text

相关问题 更多 >