Добрый день
Может кто-нибудь объяснить, что происходит за консолью Django manage.py?
Проблема в следующем. Я разрабатываю приложение Django, которое использует urllib для анализа некоторых HTML-страниц, чтобы получить от них некоторую информацию. И эта информация на русском языке, поэтому она должна быть в кодировке Unicode (в данном случае это адресная строка). Далее мой скрипт передает это в какой-то другой сторонний модуль, который падает, потому что это недопустимая строка в кодировке Юникод (я пытаюсь геодезировать точку с адреса).
Я попытался напечатать строку (в данном случае проанализированный адрес) на консоль с помощью команды print address
, но это не удалось:
File "<console>", line 1, in <module>
... some useless stacktrace ...
print address
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)
Теперь самое интересное.
У меня есть 2 компьютера: рабочая станция с Ubuntu и Python 2.7.2 и Debian Lenny VPS с Python 2.7.2. Я запускаю парсер одинаково на обеих машинах: выполняя python manage.py shell
и вызывая с него свою функцию.
Сначала я получил одинаковую ошибку в обеих установках, но затем я заметил, что моя кодировка python установлена на «ascii» (import sys; sys.getdefaultencoding()
). И когда я ставлю
import sys; reload(sys).setdefaultencoding('utf-8')
в settings.py проблема решается для Ubuntu. Теперь я получаю соответствующую печать, например, г. Челябинск, ул. Кирова, д. 27, КТК Набережный
, но это не работает для Debian.
Если я удаляю эту print address
строку, чем, я получаю нечитаемые ошибки геолокации, но опять же - только в Debian. Ubuntu работает просто отлично:
Failed to geodecode address [г. ЧелÑбинÑк, Ñл. 1-ой ÐÑÑилеÑки, 17/1, ÑÑнок ÐÑÑак, 1-з]
Никакое количество unicode(address).encode('utf-8')
магии не может помочь в этом.
Так что я просто не могу получить это. Какие различия между машинами доставляют мне столько хлопот?