urllib2中response.info().getencoding()的实现是不是坏了?

2 投票
2 回答
604 浏览
提问于 2025-04-15 13:46

我希望在下面这个Python会话中,getencoding的输出结果是“ISO-8859-1”:

>>> import urllib2
>>> response = urllib2.urlopen("http://www.google.com/")
>>> response.info().plist
['charset=ISO-8859-1']
>>> response.info().getencoding()
'7bit'

这是在Python 2.6版本下运行的(具体是'2.6 (r26:66714, 2009年8月17日, 16:01:07) \n[GCC 4.0.1 (苹果公司构建 5484)]')。

2 个回答

0

根据这个文档

Message.getencoding()

这个方法会返回在Content-Transfer-Encoding这个消息头中指定的编码。如果没有这个消息头,就返回'7bit'。而且返回的编码会被转换成小写字母。

0

那么,你觉得哪里有问题呢?

我在波兰使用urllib和wget时,得到的是ISO-8859-2的编码。而用Firefox浏览器时,我得到的是UTF-8的编码。这是因为我的Firefox告诉网站它可以接受ISO-8859-1和UTF-8的编码,而wget和urllib2则没有说明任何编码。这其中相关的请求头是:

Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7

如果把UTF-8去掉,你就不会得到UTF-8的编码,这个可以通过telnet连接到80端口来简单测试。

Google.com默认使用ISO-8859-1编码,而google.pl则使用ISO-8859-2编码,这样的默认设置在其他网站也可能存在。

我在使用wget、urllib2或telnet时都没有看到编码头,我猜urllib2可能默认使用7位编码,这样可能有点不合理,因为内容编码通常是gzip或者没有编码。

撰写回答