Vous n'êtes pas identifié(e).
Salut à toute la communauté !
Je débute complètement sous Django. J'ai un petit formulaire qui marche plutôt bien, et qui va stocker les données dans une base Postgres, c'est très bien.
OK, sauf que dès que j'ai un caractère spécial à saisir, j'ai une erreur (Aucun problème sans caractère spéciaux) :
'ascii' codec can't encode character u'\xe9' in position 0: ordinal not in range(128)
Pourtant je croyais que le réglage par défaut de Django était à utf8... J'ai donc essayé d'ajouter dans settings.py :
DEFAULT_CHARSET = 'utf-8'
Mais ça ne change rien...
Je remarque aussi que si ma base postgres est encodé en UTF-8 (quand je fais un "SHOW SERVER_ENCODING") ; le "client" est lui en Unicode (quand je fais un "SHOW CLIENT_ENCODING"). Serait-ce lié ?
Comment puis-je forcer Django à ne fonctionner qu'en UTF-8 ? Ou une autre approche ?
Merci !
Dernière modification par Georgie (02-03-2016 11:37:04)
Hors ligne
Django utilise l'utf8, mais il doit aussi décoder les données venant de l'environnement. Regarde les valeurs de LANG et LC_ALL pour vérifier qu'elles sont également en utf8
Hors ligne
OK merci, mais nous parlons bien du fichier settings.py de mon projet Django ?
J'ai essayé de mettre ces paramètres, mais sans changement. Je remarque aussi que la commande "locale" à la racine de mon projet Django me renvoie :
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=
Avec "LC_ALL" vide !!! C'est donc que je n'ai pas compris où mettre ce paramètre...
Non ?
Hors ligne
Bon et bien j'ai résolu ce petit souci en ajoutant tout en haut dans mon models.py :
from django.utils.encoding import python_2_unicode_compatible
Et toujours dans models.py, avant chaque class :
@python_2_unicode_compatible
Nickel !
Hors ligne