Проблема Юникода Django-Python-URLLIB-MySQL - PullRequest
0 голосов
/ 09 июля 2009

Я загружаю веб-страницу (http://autoweek.com) и пытаюсь ее обработать, но получаю ошибку кодирования. Autoweek объявляет кодировку "iso-8859-1" и имеет слово "Nürburgring" (u с умляутом)

Я делаю:

# -*- encoding: utf-8 -*-
import urllib
webpage = urllib.urlopen(feed.crawl_url).read()
webpage.decode("utf-8")

выдает следующую ошибку:

'utf8' codec can't decode bytes in position 7768-7773: unsupported Unicode code range"

, если я пропускаю шаг .decode и выполняю какой-то синтаксический анализ с библиотекой lxml, возникает ошибка при сохранении проанализированного заголовка в базу данных:

'utf8' codec can't decode bytes in position 45-50: unsupported Unicode code range

В моей базе данных есть набор символов utf8 и параметры сортировки utf-general-ci

Мои настройки:
Джанго
Python 2.4.3
MySQL 5.0.22
MySQL-python 1.2.1
mod_python 3.2.8

Ответы [ 2 ]

3 голосов
/ 09 июля 2009

Если webpage объявляет кодировку iso-8859-1, вы не можете просто сделать webpage.decode("iso-8859-1")?

На этом этапе webpage декодируется для вашего приложения. Когда он записывается в базу данных, отображение должно обрабатывать кодировку char-to-utf8.

Чтобы получить правильную кодировку, либо скажите веб-серверу, что вы принимаете только, скажем, UTF-8, и тогда это то, что вы (надеюсь) всегда получите, поскольку почти все читают UTF-8 (или вы можете попробовать его). с ISO-8859-1); или используйте .info для проверки имени кодировки возвращаемого потока.

См. urllib2 - Отсутствующее руководство и Краткий справочник по заголовкам HTTP для получения подробной информации.

0 голосов
/ 09 июля 2009

autoweek.com , кажется, запутался из-за собственной кодировки. Он объявляет конфликтующие определения кодировки:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 

и позже ...

<meta charset=iso-8859-1"/>.

iso-8859-1 является правильным, так как он возвращается в заголовке с веб-сервера и методом .info() (и он фактически декодирует), но это показывает, что вы не можете полагаться на контент -Тип объявления в веб-страницах. Вы должны следовать методу, описанному Лавинио.

...