Не нарушена ли реализация response.info (). Getencoding () в urllib2? - PullRequest
2 голосов
/ 21 августа 2009

Я ожидаю, что вывод getencoding в следующем сеансе Python будет "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, 17 августа 2009, 16:01:07) \ n [GCC 4.0.1 (Apple Inc. build 5484)]' специально).

Ответы [ 2 ]

0 голосов
/ 17 июня 2013

Согласно документу

Message.getencoding ()

Возвращает кодировку, указанную в заголовке сообщения Content-Transfer-Encoding . Если такого заголовка не существует, вернуть «7bit». Кодировка преобразуется в нижний регистр.

0 голосов
/ 21 августа 2009

Ну, что ты думаешь сломано?

Я получаю ISO-8859-2 для urllib и wget (в настоящее время я нахожусь в Польше). Я получаю UTF-8 с Firefox. Это потому, что мой 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, легко тестируемый при помощи telnetting на порт 80.

Google.com просто (и разумно) по умолчанию использует ISO-8859-1, а google.pl - ISO-8859-2, и я уверен, что есть другие настройки по умолчанию для других сайтов.

Я не получаю заголовок кодирования ни для wget, urllib2, ни для telnet, я полагаю, что urllib2 тогда принимает 7bit, и это может быть немного бессмысленно, поскольку Content-Encoding обычно имеет тип gzip или ничего.

...