Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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 ...

like image 263
Eric Avatar asked Feb 05 '10 03:02

Eric


2 Answers

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!

like image 95
Alex Martelli Avatar answered Nov 02 '22 17:11

Alex Martelli


django way:

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

return HttpResponseRedirect(u'/page/?title=%s' % urlquote(query_string))
like image 32
slav0nic Avatar answered Nov 02 '22 17:11

slav0nic