Encodage donne “'ascii' codec ne peut pas encoder les caractères ... ordinale pas in range(128)”

Je suis en train de travailler à travers le Django lecteur de flux RSS de projet ici.

Le flux RSS va lire quelque chose comme "OKLAHOMA CITY (AP) — James Harden laisser". Le flux RSS de l'encodage de lit encoding="UTF-8" je pense donc je suis de passage en utf-8 à démarque dans l'extrait de code ci-dessous. Le tiret cadratin est où elle s'étouffe.

- Je obtenir le Django d'erreur de "'ascii' codec ne peut pas encoder les caractères u'\u2014' à la position 109: ordinal pas in range(128)" qui est un UnicodeEncodeError. Dans les variables étant passé, je vois "OKLAHOMA CITY (AP) \u2014 James Harden". La ligne de code qui ne fonctionne pas est:

content = content.encode(parsed_feed.encoding, "xmlcharrefreplace")

Je suis en utilisant markdown 2.0, django 1.1, et python 2.4.

Qu'est-ce que la magie de la séquence de codage et de décodage que je dois faire pour faire ce travail?


(En réponse à Prometheus demande. Je suis d'accord la mise en forme permet d')

Donc dans les vues que j'ai ajouter un smart_unicode ligne au-dessus de la parsed_feed ligne de codage...

content = smart_unicode(content, encoding='utf-8', strings_only=False, errors='strict')
content = content = content.encode(parsed_feed.encoding, "xmlcharrefreplace") 

Cette repousse le problème à mon models.py pour moi où j'ai

def save(self, force_insert=False, force_update=False): 
     if self.excerpt: 
         self.excerpt_html = markdown(self.excerpt) 
         # super save after this 

Si je change la méthode save...

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)

Je reçois le message d'erreur "'ascii' codec ne peut pas décoder les octets 0xe2 en position 141: ordinal pas in range(128)" parce que maintenant il lit "\xe2\x80\x94" où le tiret cadratin était

pourriez-vous s'il vous plaît poster le traceback comme-est?
Fondamentalement, quelle est la valeur de parsed_feed.encoding? Est-il 'ascii', par hasard? (qui pourrait expliquer à la fois vos erreurs).

OriginalL'auteur user140314 | 2010-03-25