urllib2中response.info().getencoding()的实现是不是坏了?
我希望在下面这个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或者没有编码。