Eric
Eric

Reputation: 1103

How to redirect to a query string URL containing non-ascii characters in DJANGO?

How to redirect to a query string URL containing non-ascii characters in DJANGO?

When I use return HttpResponseRedirect(u'/page/?title=' + query_string) where the query_string contains characters like 你好, I get an error

'ascii' codec can't encode characters in position 21-26: ordinal not in range(128), HTTP response headers must be in US-ASCII format ...

Upvotes: 6

Views: 4009

Answers (2)

slav0nic
slav0nic

Reputation: 3805

django way:

from django.http import HttpResponseRedirect
from django.utils.http import urlquote

return HttpResponseRedirect(u'/page/?title=%s' % urlquote(query_string))

Upvotes: 6

Alex Martelli
Alex Martelli

Reputation: 882851

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

is the first thing to try (since UTF8 is the only popular encoding that can handle all Unicode characters). That should definitely get rid of the exception you're observing -- the issue then moves to ensuring the handler for /page can properly deal with UTF-8 encoded queries (presumably by decoding them back into Unicode). However, that part is not, strictly speaking, germane to this specific question you're asking!

Upvotes: 6

Related Questions