кодировка python urllib2 utf-8 - PullRequest
1 голос
/ 12 ноября 2011

хорошо, у меня есть: # -*- coding: utf-8 -*- в моем файле python.

фрагмент:

opener = urllib2.build_opener()
opener.addheaders = [('User-agent', 'Mozilla/5.0')]
opener.addheaders = [('Accept-Charset', 'utf-8')]
f =opener.open(url)
doc = f.read().decode('utf-8')

Ответ сервера: (через f.info ())

Content-Type: text/html; charset=UTF-8

но я получаю ошибку:

UnicodeDecodeError: 'utf8' codec can't decode byte[...]: invalid continuation byte

Что здесь не так?

Ответы [ 2 ]

3 голосов
/ 12 ноября 2011

Попробуйте декодировать данные, используя 'latin-1', чтобы посмотреть, как они выглядят. То, что вы видите, указывает на ошибку декодирования UTF-8 (см. UnicodeDecodeError, неверный байт продолжения ).

Было бы полезно, если бы вы опубликовали результат list(f.read())[:100], чтобы мы могли видеть данные.

К вашему сведению, # -*- coding: utf-8 -*- не имеет отношения к вашей проблеме. То, что кодировка относится к кодировке самого сценария Python, а не к данным, с которыми он работает: -)

1 голос
/ 12 ноября 2011

Эта конкретная ошибка обычно вызывается попыткой декодирования с использованием utf-8, когда строка действительно была закодирована с помощью latin1.См. UnicodeDecodeError, недопустимый байт продолжения для получения дополнительной информации.

Я подозреваю, что, несмотря на заголовок, сервер не возвращает кодированный в utf8 контент.

Решение, которое, возможно, стоит найти, - это использовать chardet , чтобы «угадать», какую кодировку использовать.Однако, несмотря на удивительность Шардета, это последнее средство.

...