У меня проблема с приложением Django, которое обрабатывает данные, импортированные из Google (через API gdata). По сути, каждый текст, импортированный из Google, отображается с проблемами кодирования на моей странице (например, «Ceará State» отображается как «Ceará State»).
В базе данных mysql установлено значение uft-8, и все тексты правильно отображаются в моих запросах, но после того, как я поэкспериментировал с оболочкой Django, все стало немного странно:
Я изменил один из этих текстов вручную, и теперь он отображается на странице без проблем с кодировкой, но текст, отображаемый оболочкой, все еще похож на текст с проблемами кодирования:
>>> v1
<Video: São Paulo is awesome!>
>>> v1.title
u'S\xe3o Paulo is awesome!'
>>> v2
<Video: Ceará State>
>>> v2.title
u'Cear\xc3\xa1 State'
А если я попытаюсь напечатать текст:
print v1.title
Traceback (most recent call last):
File "<console>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe3' in position 1: ordinal not in range(128)
Есть идеи о том, что происходит и как я могу это исправить? Спасибо.
EDIT:
Я написал очень глупую функцию для решения моей проблемы, пока нет лучшего решения:
def normalize(s):
return s.encode('utf-8').replace('á', 'á').replace('ó', 'ó').replace('ç', 'ç').replace('ã', 'ã').replace('Ã', 'í')
EDIT 2:
Проблема была вызвана Apache, который не был настроен на использование UFT-8.