J'essaie de comprendre comment gérer correctement les caractères spéciaux dans Django/Python. J'ai ajouté à mon views.py et models.py la chaîne de codage suivant:Gestion des caractères spéciaux django
# -*- coding: utf-8 -*-
Mais quand la cmd suivante est appelée avec un nom de l'ordre d'achat réglé sur « TestÄÜÖ » il plante:
messages.add_message(request, messages.INFO, 'The purchase order "%s" has been successfully added to project "%s".' % (purchase_order, project.name))
l'erreur renvoyée est la suivante:
File "..accounting/views.py", line 1100, in post_logic
messages.add_message(request, messages.INFO, 'The purchase order "%s" has been successfully added to project "%s".' % (purchase_order, project.name))
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 20: ordinal not in range(128)
le modèle PurchaseOrder ressemble à ceci.
class PurchaseOrder(models.Model):
"""
purchase order assigned to a project
"""
number = models.CharField(max_length=200)
name = models.CharField(max_length=200, null=True, blank=True, default="")
def __unicode__(self):
return u'%s - %s' % (self.name, self.number)
Le problème ne se produit pas si j'ajoute u
en face de la chaîne de message:
messages.add_message(request, messages.INFO, u'The purchase order "%s" has been successfully added to project "%s".' % (purchase_order, project.name))
Mais le docs dire que dans Django 1.5 (j'utilise 1,5) une chaîne normale devrait être une chaîne unicode et il n'y a pas besoin de u
.
Donc je ne veux pas ajouter à tous mes appels add_message un u
, si les docs disent que ce n'est pas nécessaire. Quelqu'un peut-il faire la lumière sur ce sujet d'encodage?
Essayez-le avec 'purchase_order.encode ('utf-8')' –