python
  • django
  • unicode
  • httpresponse
  • 2010-02-05 5 views 6 likes 
    6

    Comment rediriger vers une chaîne de requête URL contenant des caractères non-ascii dans DJANGO? Lorsque j'utilise "return HttpResponseRedirect (u '/ page /? Title =' + query_string)" où la chaîne query_string contient des caractères comme "你好", j'obtiens une erreur "codec" ascii "ne peut pas encoder les caractères dans Position 21-26: ordinal dans la plage (128), les en-têtes de réponse HTTP doivent être au format US-ASCII » ...Comment rediriger vers une chaîne de requête URL contenant des caractères non-ascii dans DJANGO?

    +0

    Peut-être que cette aide: http://stackoverflow.com/questions/787935/python-interface-to-paypal-urllib-urlencode-non-ascii-characters-failing –

    +0

    Il est le même problème mais cette question n'a pas non plus de solution:/ – Eric

    Répondre

    6
    HttpResponseRedirect(((u'/page/?title=' + query_string).encode('utf-8')) 
    

    est la première chose à essayer (puisque UTF8 est le seul encodage populaire qui peut gérer tous les caractères Unicode). Cela devrait définitivement se débarrasser de l'exception que vous observez - le problème consiste alors à s'assurer que le gestionnaire de /page peut traiter correctement les requêtes codées UTF-8 (probablement en les décodant de nouveau en Unicode). Cependant, cette partie n'est pas, à proprement parler, pertinente à cette question précise que vous posez!

    +0

    le caractère chinois est '\ xe4 \ xbd \ xa0' dans utf-8 ... '\ xe4', sous forme entière est "228" ... qui ne peut pas être converti en ascii car il est hors de portée (128). :/Je me souviens qu'il y a une forme de représentation comme 由 ou quelque chose comme ça, mais je ne trouve aucune information à ce sujet. Il existe un post quelque part qui fait une référence passagère: http://forums.mysql.com/read.php?103,22136,22199#msg-22199 – Eric

    +0

    @Eric, lorsque vous passez un 'str' (un encoded byte string) à 'HttpResponseRedirect', plutôt qu'à un objet' unicode' comme vous l'avez fait, il n'y aura pas besoin de Python pour essayer de l'encoder (avec le codec '' ascii 'par défaut) et échouer. Donc le '\ xe4' (et les autres caractères de ord> = 128) ne sera pas un problème! –

    +1

    OMG J'ai trouvé la réponse après tant d'heures ... HttpResponseRedirect (urllib.quote_plus ((/ '/ page /? Title =' + query_string) .encode ('utf-8'))) – Eric

    6

    façon django:

    from django.http import HttpResponseRedirect 
    from django.utils.http import urlquote 
    
    return HttpResponseRedirect(u'/page/?title=%s' % urlquote(query_string)) 
    

     Questions connexes

    • Aucun problème connexe^_^