Django-fr

Forum

#1 29-10-2012 09:18:10

EagleOne
Membre
Inscription : 29-10-2012
Messages : 2

Objet request contenant un unicode non valide

Bonjour à tous,

j'ai un problème avec les accents. Un problème bien français (même si pas que français...).

Voilà mon soucis. J'ai une formulaire qui est envoyé avec certains fields pouvant contenir des é ou autre caractère accentué.
Je crois avoir encodé ma page en UTF-8 avec une balise dans ma page base.html:

<meta http-equiv="Content-type" content="text/html;charset=UTF-8"/>

Voilà l'adresse générée:

http://localhost:8080/recherches/s?marque=Audi&modeles=A5+Coup%C3%A9

Et voilà ce que je récupère le contenu de mes variable dans mon views.py:

def search(request):
  logger = logging.getLogger('custom')
  criteria_form = CriteriaForm(request.GET or None)
  logger.debug(request.GET)

le contenu (entre autre) de mon request.GET est:

<QueryDict: {u'marque': [u'Audi'], u'modeles': [u'A5 Coup\xc3\xa9']}>

Comme on peut le voir, le u'A5 Coup\xc3\xa9'  n'est pas un unicode valide. Et bien sûr si je query ma database avec ça, je ne trouve pas le contenu attendu.

Du coup je dois avoir un problème d'encoding de ma page. Ou mon formulaire n'envoie pas le bon encoding, ou django passe en unicode du UTF-8... Bref je suis un peu perdu. Si quelqu'un pouvait m'aider...

Merci d'avance

Hors ligne

#2 29-10-2012 09:31:57

Florian Strzelecki
Membre
Inscription : 11-08-2010
Messages : 40

Re : Objet request contenant un unicode non valide

Bonjour,

Peut-être un problème avec l'environnement.

Essaye ceci en ligne de commande pour commencer :

>>> import locale
>>> locale.getlocale()
(None, None)
>>> locale.getdefaultlocale()
('fr_FR', 'UTF-8')

Essaye ensuite de logger (ou de l'afficher dans un template) ça depuis ta
vue django, histoire de voir si tout est cohérent. Tu pourrais avoir de
l'ISO à la place, ou ne pas avoir du tout de locale par défaut (en python
2.x cela revient à utiliser le codec ASCII, de mémoire).
Enfin, je ne suis pas sûr que tu ais un gain quelconque à utiliser un
*formulaire* avec une requête GET, et encore moins d'intérêt à faire une
recherche avec une requête GET (un POST serait sans doute plus approprié).

Florian S.

Le 29 octobre 2012 09:18, EagleOne <gontran.magnat _AT_ gmail.com> a écrit :

> Bonjour à tous,
>
> j'ai un problème avec les accents. Un problème bien français (même si
> pas que français...).
>
> Voilà mon soucis. J'ai une formulaire qui est envoyé avec certains
> fields pouvant contenir des é ou autre caractère accentué.
> Je crois avoir encodé ma page en UTF-8 avec une balise dans ma page
> base.html:
>

<meta http-equiv="Content-type"
> content="text/html;charset=UTF-8"/>

>
> Voilà l'adresse générée:
>
>

> http://localhost:8080/recherches/s?marque=Audi&modeles=A5+Coup%C3%A9

>
> Et voilà ce que je récupère le contenu de mes variable dans mon
> views.py:
>

> def search(request):
>   logger = logging.getLogger('custom')
>   criteria_form = CriteriaForm(request.GET or None)
>   logger.debug(request.GET)
>

>
> le contenu (entre autre) de mon request.GET est:
>

<QueryDict: {u'marque': [u'Audi'], u'modeles': [u'A5
> Coup\xc3\xa9']}>

>
> Comme on peut le voir, le u'A5 Coup\xc3\xa9'  n'est pas un unicode valide.
> Et bien sûr si je query ma database avec ça, je ne trouve pas le contenu
> attendu.
>
> Du coup je dois avoir un problème d'encoding de ma page. Ou mon
> formulaire n'envoie pas le bon encoding, ou django passe en unicode du
> UTF-8... Bref je suis un peu perdu. Si quelqu'un pouvait m'aider...
>
> Merci d'avance
> _______________________________________________
> django mailing list
> django _AT_ lists.afpy.org
> http://lists.afpy.org/mailman/listinfo/django
>

Hors ligne

#3 29-10-2012 09:33:59

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

Re : Objet request contenant un unicode non valide

Hello

On a discuté un peu plus tôt la dessus sur irc.
Par contre, je n'avais pas percuté, mais ton url est déjà passé de l'utf-8 en ascii.
Si je soumets un formulaire en GET avec un accent, j'obtiens bien un "modeles=A5+Coupé" et non "A5+Coup%C3%A9"
As-tu moyen d'envoyer le code html de ta page pour qu'on puisse regarder les encoding et autres ?

Cordialement,
Xavier Ordoquy,
Linovia.

Le 29 oct. 2012 à 09:18, EagleOne <gontran.magnat _AT_ gmail.com> a écrit :

> Bonjour à tous,
>
> j'ai un problème avec les accents. Un problème bien français (même si
> pas que français...).
>
> Voilà mon soucis. J'ai une formulaire qui est envoyé avec certains
> fields pouvant contenir des é ou autre caractère accentué.
> Je crois avoir encodé ma page en UTF-8 avec une balise dans ma page
> base.html:
>

<meta http-equiv="Content-type"
> content="text/html;charset=UTF-8"/>

>
> Voilà l'adresse générée:
>
>

http://localhost:8080/recherches/s?marque=Audi&modeles=A5+Coup%C3%A9

>
> Et voilà ce que je récupère le contenu de mes variable dans mon
> views.py:
>

> def search(request):
>  logger = logging.getLogger('custom')
>  criteria_form = CriteriaForm(request.GET or None)
>  logger.debug(request.GET)
>

>
> le contenu (entre autre) de mon request.GET est:
>

<QueryDict: {u'marque': [u'Audi'], u'modeles': [u'A5
> Coup\xc3\xa9']}>

>
> Comme on peut le voir, le u'A5 Coup\xc3\xa9'  n'est pas un unicode valide.
> Et bien sûr si je query ma database avec ça, je ne trouve pas le contenu
> attendu.
>
> Du coup je dois avoir un problème d'encoding de ma page. Ou mon
> formulaire n'envoie pas le bon encoding, ou django passe en unicode du
> UTF-8... Bref je suis un peu perdu. Si quelqu'un pouvait m'aider...
>
> Merci d'avance
> _______________________________________________
> django mailing list
> django _AT_ lists.afpy.org
> http://lists.afpy.org/mailman/listinfo/django

Hors ligne

#4 29-10-2012 09:33:59

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

Re : Objet request contenant un unicode non valide

Hello

On a discuté un peu plus tôt la dessus sur irc.
Par contre, je n'avais pas percuté, mais ton url est déjà passé de l'utf-8 en ascii.
Si je soumets un formulaire en GET avec un accent, j'obtiens bien un "modeles=A5+Coupé" et non "A5+Coup%C3%A9"
As-tu moyen d'envoyer le code html de ta page pour qu'on puisse regarder les encoding et autres ?

Cordialement,
Xavier Ordoquy,
Linovia.

Le 29 oct. 2012 à 09:18, EagleOne <gontran.magnat _AT_ gmail.com> a écrit :

> Bonjour à tous,
>
> j'ai un problème avec les accents. Un problème bien français (même si
> pas que français...).
>
> Voilà mon soucis. J'ai une formulaire qui est envoyé avec certains
> fields pouvant contenir des é ou autre caractère accentué.
> Je crois avoir encodé ma page en UTF-8 avec une balise dans ma page
> base.html:
>

<meta http-equiv="Content-type"
> content="text/html;charset=UTF-8"/>

>
> Voilà l'adresse générée:
>
>

http://localhost:8080/recherches/s?marque=Audi&modeles=A5+Coup%C3%A9

>
> Et voilà ce que je récupère le contenu de mes variable dans mon
> views.py:
>

> def search(request):
>  logger = logging.getLogger('custom')
>  criteria_form = CriteriaForm(request.GET or None)
>  logger.debug(request.GET)
>

>
> le contenu (entre autre) de mon request.GET est:
>

<QueryDict: {u'marque': [u'Audi'], u'modeles': [u'A5
> Coup\xc3\xa9']}>

>
> Comme on peut le voir, le u'A5 Coup\xc3\xa9'  n'est pas un unicode valide.
> Et bien sûr si je query ma database avec ça, je ne trouve pas le contenu
> attendu.
>
> Du coup je dois avoir un problème d'encoding de ma page. Ou mon
> formulaire n'envoie pas le bon encoding, ou django passe en unicode du
> UTF-8... Bref je suis un peu perdu. Si quelqu'un pouvait m'aider...
>
> Merci d'avance
> _______________________________________________
> django mailing list
> django _AT_ lists.afpy.org
> http://lists.afpy.org/mailman/listinfo/django

Hors ligne

#5 30-10-2012 17:40:18

EagleOne
Membre
Inscription : 29-10-2012
Messages : 2

Re : Objet request contenant un unicode non valide

Apres moult recherches et l'aide de quelques personnes de la communaute Django-fr sur IRC, j'ai trouve le soucis: Ma version de Django

J'etais en Django 1.5
J'ai essaye la meme chose en Django 1.4 : tout OK
J'ai essaye dans la toute derniere version de Django: 1.5a1: tout OK

voila super! Ca m'apprendra a vouloir utiliser les beta...

Merci a ceux qui m'ont aide!

Hors ligne

Pied de page des forums