Я работаю над проектом Django RSS reader здесь.
RSS-канал будет читать что-то вроде "OKLAHOMA CITY (AP) - James Harden let". Кодировка RSS-канала считывает кодировку = "UTF-8", поэтому я считаю, что передаю utf-8 для уценки в фрагменте кода ниже. Em dash - это место, где он задыхается.
Я получаю ошибку Django кодека '' ascii '' не может кодировать символ u '\ u2014' в позиции 109: порядковый номер не в диапазоне (128) ", который является UnicodeEncodeError. В передаваемых переменных я вижу" OKLAHOMA CITY (AP)\u2014 Джеймс Харден". Строка кода, которая не работает:
content = content.encode(parsed_feed.encoding, "xmlcharrefreplace")
Я использую markdown 2.0, django 1.1 и python 2.4.
Какова магическая последовательность кодирования и декодирования, которую мне нужно сделать, чтобы сделать эту работу?
(В ответ на запрос Прометея. Я согласен, что форматирование помогает)
Итак, в представлениях я добавляю строку smart_unicode над строкой кодирования parsed_feed...
content = smart_unicode(content, encoding='utf-8', strings_only=False, errors='strict')
content = content = content.encode(parsed_feed.encoding, "xmlcharrefreplace")
Это подталкивает проблему к моим models.py для меня, где у меня
def save(self, force_insert=False, force_update=False):
if self.excerpt:
self.excerpt_html = markdown(self.excerpt)
# super save after this
Если я изменил метод сохранения, чтобы...
def save(self, force_insert=False, force_update=False):
if self.excerpt:
encoded_excerpt_html = (self.excerpt).encode('utf-8')
self.excerpt_html = markdown(encoded_excerpt_html)
Я получаю код ошибки "'ascii не может декодировать байт 0xe2 в позиции 141: порядковый номер не в диапазоне (128)" , потому что теперь он читает "\ xe2\x80\x94", где em emash был