urllib2, открывающий неправильную кодировку - PullRequest
4 голосов
/ 25 февраля 2012

Когда я открываю URL и читаю его, я не могу его распознать. Но когда я проверяю заголовок контента, он говорит, что он закодирован как utf-8. Поэтому я попытался преобразовать его в Unicode, и он пожаловался на UnicodeDecodeError: кодек «ascii» не может декодировать байт 0x8b в позиции 1: порядковый номер не в диапазоне (128) с использованием unicode ().

.encode ("utf-8") производит UnicodeDecodeError: кодек «ascii» не может декодировать байт 0x8b в позиции 1: порядковый номер не в диапазоне (128)

.decode ("utf-8") произведено UnicodeDecodeError: кодек «utf8» не может декодировать байт 0x8b в позиции 1: недопустимый начальный байт.

Я перепробовал все, что мог придумать (я не очень хорош в кодировках)

Я был бы счастлив, если бы я мог заставить это работать. Спасибо.

Ответы [ 2 ]

7 голосов
/ 21 ноября 2012

Это распространенная ошибка.Сервер отправляет GZIP-поток.

Вы должны сначала распаковать его:

response = opener.open(self.__url, data)
if response.info().get('Content-Encoding') == 'gzip':
    buf = StringIO.StringIO( response.read())
    gzip_f = gzip.GzipFile(fileobj=buf)
    content = gzip_f.read()
else:
    content = response.read()
0 голосов
/ 25 февраля 2012

Возможно, заголовок неверный.Проверьте chardet .

РЕДАКТИРОВАТЬ: Думая об этом больше - мои деньги на содержание gzipped.Я полагаю, что некоторые из различных модулей / классов / etc для открытия URL в Python будут распакованы, а другие - нет.

...