Python - 'ascii' codec ne peut pas décoder les octets
Je suis à l'aide de Python 2.6 et Jinja2 pour créer des rapports HTML. - Je fournir le modèle avec de nombreux résultats et le modèle de boucles à travers eux et crée des tableaux en HTML
Lors de l'appel de modèle.le rendu, j'ai soudain commencé à avoir cette erreur.
<td>{{result.result_str}}</td>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc4 in position 0: ordinal not in range(128)
La chose étrange est que, même si j'ai mis en résultat.result_str à une simple chaîne de caractères ascii comme "abc" pour chaque résultat, je vois toujours cette erreur. Je suis nouveau sur Jinja2 et Python, et apprécie les idées sur comment je peux aller sur d'analyser le problème pour obtenir à la cause racine.
Vous devez vous connecter pour publier un commentaire.
Si vous obtenez une erreur avec la chaîne "ABC", peut-être que le caractère non-ASCII est quelque part d'autre. Dans le modèle source, peut-être?
Dans tous les cas, utilisez des chaînes Unicode tout au long de votre application afin d'éviter ce genre de problèmes. Si votre source de données vous fournit des chaînes d'octets, vous obtenez des chaînes unicode avec
byte_string.decode('utf-8')
, si la chaîne est encodé en UTF-8. Si votre source est un fichier, utilisez laStreamReader
classe dans les codecs module.Si vous n'êtes pas sûr à propos de la différence entre les chaînes Unicode et régulier des chaînes, lisez ceci: http://www.joelonsoftware.com/articles/Unicode.html
Essayez d'ajouter ceci:
Il fixe mon problème, bonne chance.
De http://jinja.pocoo.org/docs/api/#unicode
Donc où que vous définissez résultat.result_str, vous avez besoin de faire unicode, par exemple
(Si votre octets ont été encodés en utf-8 unicode)
ou
utf-8
au lieu deascii
? stackoverflow.com/questions/28642781/...Juste rencontré le même problème dans un morceau de code qui enregistre la sortie de Jinja2 de fichiers HTML:
Il est facile de blâmer Jinja2, bien que le véritable problème est en Python
open()
qui, à partir de la version 2.7 ne supporte pas l'UTF-8. La solution est aussi simple que:De simples chaînes peuvent contenir de caractères UTF-8 octets, mais ils ne sont pas de type unicode. Ceci peut être corrigé en "décoder" qui convertit les str en unicode. Fonctionne en Python 2.5.5.
my_string_variable.decode("utf8")
ASCII à 7 bits de code. La valeur 0xC4 ne peuvent pas être stockées sur 7 bits. Par conséquent, vous utilisez le mauvais encodage de données.
0xC4
. Trouver ce personnage. Le supprimer.Ou vous pouvez le faire
dans votre console lorsque vous exécutez le script.