Django-fr

Forum

#1 02-03-2016 11:36:48

Georgie
Membre
Inscription : 29-02-2016
Messages : 5

Problème d'encodage sous Postgres

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

#2 03-03-2016 09:11:43

Xavier Ordoquy
Administrateur
Lieu : Puteaux, France
Inscription : 12-10-2011
Messages : 312
Site Web

Re : Problème d'encodage sous Postgres

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

#3 03-03-2016 10:59:35

Georgie
Membre
Inscription : 29-02-2016
Messages : 5

Re : Problème d'encodage sous Postgres

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

#4 06-03-2016 00:45:42

Georgie
Membre
Inscription : 29-02-2016
Messages : 5

Re : Problème d'encodage sous Postgres

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

Pied de page des forums