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

    Wie wird auf eine Abfragezeichenfolge-URL mit nicht-ASCII-Zeichen in DJANGO umgeleitet?Wie umleiten zu einer Abfragezeichenfolge-URL, die nicht-ASCII-Zeichen in DJANGO enthält?

    Wenn ich "return HttpResponseRedirect (u/page /? Title = '+ query_string)" wo der query_string Zeichen wie "你好" enthält, bekomme ich einen Fehler "' ascii 'Codec kann nicht codieren Zeichen in 21-26 Position: Ordnungszahl nicht in Reichweite (128), HTTP-Response-Header in US-ASCII-Format“sein muss ...

    +0

    Vielleicht hilft: http://stackoverflow.com/questions/787935/python-interface-to-paypal-urllib-urlencode-non-ascii-characters-failing –

    +0

    Es ist das gleiche Problem, aber diese Frage hatte auch keine Lösung:/ – Eric

    Antwort

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

    das erste, was zu versuchen (da UTF8 die einzige populäre Codierung das kann ist handle alle Unicode-Zeichen). Das sollte die Ausnahme, die Sie beobachten, definitiv loswerden - das Problem wird dann behoben, um sicherzustellen, dass der Handler für /page mit UTF-8-codierten Abfragen richtig umgehen kann (vermutlich indem er sie zurück in Unicode decodiert). Dieser Teil ist jedoch streng genommen nicht relevant für diese spezielle Frage, die Sie stellen wollen!

    +0

    das chinesische Zeichen ist '\ xe4 \ xbd \ xa0' in utf-8 ... '\ xe4', in ganzzahliger Form ist "228" ... welches nicht in ascii umgewandelt werden kann, weil es außerhalb des Bereichs liegt (128). Ich erinnere mich, dass es eine Art von Repräsentation wie 由 oder etwas Ähnliches gibt, aber ich kann keine Informationen darüber finden. Es gibt einen Post irgendwo, der eine vorübergehende Referenz darauf macht: http://forums.mysql.com/read.php?103,22136,22199#msg-22199 – Eric

    +0

    @Eric, wenn Sie eine 'str' übergeben (ein codierte Byte-String) zu "HttpResponseRedirect", anstatt wie bisher ein "Unicode" -Objekt, es wird nicht notwendig sein, dass Python versucht, es zu codieren (mit dem Standard-ASCII-Codec) und fehlschlägt. Das '\ xe4' (und andere Zeichen von ord> = 128) ist also kein Problem! –

    +1

    OMG Ich habe die Antwort gefunden, nach so vielen Stunden ... HttpResponseRedirect (urllib.quote_plus (('/ Seite /? Title =' + query_string) .encode ('utf-8'))) – Eric

    6

    django Weg:

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